Ich habe eine Routine um einen 24Bit Wert dezimal darzustellen. Leider funktioniert das Teil bei größeren Zahlen nicht so wie gewünscht und ich komme einfach nicht auf den Fehler... Es werden dann irgendwelche Sonderzeichen angezeigt und nicht die Zahlenwerte.
1 | void print_number_u24(uint32_t d) { |
2 | uint8_t zehner=0, hunderter=0, tausender=0, zehntausender=0, hunderttausender=0, millionste=0, zehnmillionste=0; |
3 | |
4 | while ( (uint32_t) d >= 10000000UL) { |
5 | d = (uint32_t) d - 10000000UL; |
6 | zehnmillionste++; |
7 | }
|
8 | while ( (uint32_t) d >= 1000000UL) { |
9 | d = (uint32_t) d - 1000000UL; |
10 | millionste++; |
11 | }
|
12 | while ( (uint32_t) d >= 100000UL) { |
13 | d = (uint32_t) d - 100000UL; |
14 | hunderttausender++; |
15 | }
|
16 | while (d >= 10000) { |
17 | d = (uint16_t) d - 10000; |
18 | zehntausender++; |
19 | }
|
20 | while (d >= 1000) { |
21 | d = (uint16_t) d - 1000; |
22 | tausender++; |
23 | }
|
24 | while (d >= 100) { |
25 | d = (uint16_t) d - 100; |
26 | hunderter++; |
27 | }
|
28 | while (d >= 10) { |
29 | d = d - 10; |
30 | zehner++; |
31 | }
|
32 | |
33 | uint8_t printzero=0; |
34 | if (zehnmillionste) { |
35 | print(zehnmillionste); |
36 | printzero = 1; |
37 | }
|
38 | if (millionste || printzero) { |
39 | print(millionste); |
40 | printzero = 1; |
41 | }
|
42 | if (hunderttausender || printzero) { |
43 | print(hunderttausender); |
44 | printzero = 1; |
45 | }
|
46 | if (zehntausender || printzero) { |
47 | print(zehntausender); |
48 | printzero = 1; |
49 | }
|
50 | if (tausender || printzero) { |
51 | print(tausender); |
52 | printzero = 1; |
53 | }
|
54 | if (hunderter || printzero) { |
55 | print(hunderter); |
56 | printzero = 1; |
57 | }
|
58 | if (zehner || printzero) { |
59 | print(zehner); |
60 | }
|
61 | print(d); |
62 | }
|