Hallo zusammen, ich bin ein einsteiger in C und versuche grade auf einem LCD_Display zahlen auszugeben. Auf der FAQ Seite habe ich mir schon "Wie kann ich Zahlen auf LCD/UART ausgeben?" durchgelesen aber nicht zu 100% verstanden. Link https://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F Ich habe mal Spaßes weise den Code einfach kopiert und ausprobiert und es funktioniert. Aber was habe ich davon wenn ich es einfach nur einfüge. Kann man den Code vereinfachen so das es auch ein Anfänger versteht? Mein Ziel ist es den Code zu verstehen und daraus eine neue Funktion zu machen FtoA
1 | u = ( (unsigned)-(z+1) ) + 1; //ich weiß das hier unsigned für posetive Zahlen steht aber was hat es mit z+1 zu tun und warum? |
1 | Buffer[i++] = '0' + u % 10; // hier verstehe ich den "u % 10" Teil nicht, kann man das einfacher schreiben? |
1 | u /= 10; //Vereinfacht wäre es ja dann "u = u / 10;" oder? |
1 | |
2 | // Ich verstehe zwar was es macht das die Zahlen sich spiegeln sollen
|
3 | // aber ich verstehe nicht wie
|
4 | // bei der for-schleife verstehe ich das i/ 2 nicht warum man es tut.
|
5 | |
6 | for( j = 0; j < i / 2; ++j ) { |
7 | tmp = Buffer[j]; |
8 | Buffer[j] = Buffer[i-j-1]; |
9 | Buffer[i-j-1] = tmp; |
10 | }
|
11 | Buffer[i] = '\0'; |
Original Code
1 | void ItoA( int z, char* Buffer ) |
2 | {
|
3 | int i = 0; |
4 | int j; |
5 | char tmp; |
6 | unsigned u; // In u bearbeiten wir den Absolutbetrag von z. |
7 | |
8 | // ist die Zahl negativ?
|
9 | // gleich mal ein - hinterlassen und die Zahl positiv machen
|
10 | if( z < 0 ) { |
11 | Buffer[0] = '-'; |
12 | Buffer++; |
13 | // -INT_MIN ist idR. größer als INT_MAX und nicht mehr
|
14 | // als int darstellbar! Man muss daher bei der Bildung
|
15 | // des Absolutbetrages aufpassen.
|
16 | u = ( (unsigned)-(z+1) ) + 1; |
17 | }
|
18 | else { |
19 | u = (unsigned)z; |
20 | }
|
21 | // die einzelnen Stellen der Zahl berechnen
|
22 | do { |
23 | Buffer[i++] = '0' + u % 10; |
24 | u /= 10; |
25 | } while( u > 0 ); |
26 | |
27 | // den String in sich spiegeln
|
28 | for( j = 0; j < i / 2; ++j ) { |
29 | tmp = Buffer[j]; |
30 | Buffer[j] = Buffer[i-j-1]; |
31 | Buffer[i-j-1] = tmp; |
32 | }
|
33 | Buffer[i] = '\0'; |
34 | }
|