Forum: Mikrocontroller und Digitale Elektronik uint64_t nach char[]


von Der H. (picasso323)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

Dezimal? Hexadezimal?
Brauchst du wirklich 64 Bit?

von Klaus W. (mfgkw)


Lesenswert?

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
}

von Der H. (picasso323)


Lesenswert?

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

von TestX .. (xaos)


Lesenswert?

sprintf ?

von Klaus W. (mfgkw)


Lesenswert?

Klaus Wachtler schrieb:
> Brauchst du wirklich 64 Bit?

Chris Moeller schrieb:
> Staatsverschuldung

ok, eingesehen

von Klaus W. (mfgkw)


Lesenswert?


von Ralf (Gast)


Lesenswert?

Chris Moeller schrieb:
> Das Display soll die Staatsverschuldung anzeigen
Ach, da reichen 64Bit? :-))

von Ralf (Gast)


Lesenswert?

Oder (je nachdem, welche Funktion dann kürzer ist):
1. Division durch 10Mrd.
2. Ergebnis und Rest mit 'ltoa' umwandeln
3. wieder zusammensetzen

von Der H. (picasso323)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.