Hallo liebe Profis, ich hänge im Moment an einem wahrscheinlich sehr einfach zu lösenden Problem fest. Es geht darum, eine uint64_t große Zahl auf einem LCD Display auszugeben. Für die LCD-Ansteuerung verwende ich die Library von Peter Fleury. Leider gibt es in winavr die Funktion lltoa nicht, und ultoa reicht nicht aus für 64 Bit. Wie könnte man diese große Zahl auf dem LCD anzeigen? char buffer[30]; uint64_t num=1234567890123; ultoa(num, buffer, 10); ??? lcd_puts(buffer); Grüße aus dem Norden
1 | #include <stdlib.h> |
2 | #include <stddef.h> |
3 | #include <stdio.h> |
4 | #include <string.h> |
5 | |
6 | #include <stdint.h> |
7 | |
8 | char *uint64toa( uint64_t value, char *puffer, int base ) |
9 | {
|
10 | static const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
11 | char *puffer_end = puffer; |
12 | char *puffer_anf = puffer; |
13 | |
14 | // generate string in reverse order:
|
15 | do
|
16 | {
|
17 | *puffer_end++ = digits[value%base]; |
18 | value /= base; |
19 | }
|
20 | while( value ); |
21 | *puffer_end-- = '\0'; // terminate |
22 | |
23 | // reverse to correct order:
|
24 | while( puffer_anf<puffer_end ) |
25 | {
|
26 | char tmp = *puffer_anf; |
27 | *puffer_anf++ = *puffer_end; |
28 | *puffer_end-- = tmp; |
29 | }
|
30 | |
31 | return puffer; |
32 | }
|
33 | |
34 | |
35 | |
36 | int main( int nargs, char **args ) |
37 | {
|
38 | uint64_t testwert = 123456; |
39 | char puffer[20]; |
40 | |
41 | uint64toa( testwert, puffer, 16 ); |
42 | |
43 | printf( "<%llx> <%s>\n", testwert, puffer ); |
44 | |
45 | return 0; |
46 | }
|
Hallo Klaus, herzlichen Dank, ich werde das gleich nach Feierabend testen. Für meine "Spielerei" benötige ich Dezimalzahlen. Das Display soll die Staatsverschuldung anzeigen (2.028.305.539.778 €). Die Uhrzeit hole ich mir über einen DS3232 RTC IC. Grüße Christian
Klaus Wachtler schrieb: > Brauchst du wirklich 64 Bit? Chris Moeller schrieb: > Staatsverschuldung ok, eingesehen
Andi D. schrieb: > sprintf ? Von long long sehe ich bei http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gaa3b98c0d17b35642c0f3e4649092b9f1 nichts.
Chris Moeller schrieb: > Das Display soll die Staatsverschuldung anzeigen Ach, da reichen 64Bit? :-))
Oder (je nachdem, welche Funktion dann kürzer ist): 1. Division durch 10Mrd. 2. Ergebnis und Rest mit 'ltoa' umwandeln 3. wieder zusammensetzen
Danke für eure Tips. Ich werde es wohl so machen wie Ralf vorgeschlagen hat, das spart Ressourcen. Manchmal kommt man nicht auf das Naheliegendste... Grüße Christian
Chris Moeller schrieb: > Danke für eure Tips. Ich werde es wohl so machen wie Ralf vorgeschlagen Achte aber auf die führenden 0-en beim Rest :-) > hat, das spart Ressourcen. Kriegst du Geld zurück für Flash das du nicht benutzt hast?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.