long long und sprintf()

Gast #1493571
Lesenswert?

hallo,

ich habe folgendes problem

long long hat doch 64bit speicherplatz richtig?

ich habe testweise in eine long long variable den wert
1
test= 0xFFFFFFFFFFFFFFFF
(16F = 64bits)
gespeichert

nun will ich diesen wert mit hilfe von
1
sprintf(out,"%x",test)
in einen char array schreiben...das array ist groß genug
das geht auch, aber nur mit den ersten 4 Fs....woran liegt das?

sollte long long doch nur 16bit lang sein?


gruß
#1493590
Lesenswert?

1. der Wert sollte als unsigned deklariert sein, macht aber
letztlich nichts aus, wenn man weiß was man tut.

2. %lx gibt auch nicht long long unsigned (8 Byte) aus, sondern nur
long unsigned (4 Byte).

3. in "normalen" glibc ist %llx das richtige Format für
long long unsigned. In der avr-libc gibt es %llx aber nicht m.W.,
also Pech bei long long.
#1493611
Lesenswert?

In der inttypes.h von WinAVR steht
1
#ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf
2

3
#define    PRIo64      "llo"
4
#define    PRIoLEAST64    "llo"
5
#define    PRIoFAST64    "llo"
6

7
#define    PRIu64      "llu"
8
#define    PRIuLEAST64    "llu"
9
#define    PRIuFAST64    "llu"
10

11
#define    PRIx64      "llx"
12
#define    PRIxLEAST64    "llx"
13
#define    PRIxFAST64    "llx"
14

15
#define    PRIX64      "llX"
16
#define    PRIXLEAST64    "llX"
17
#define    PRIXFAST64    "llX"
18

19
#define    PRIoMAX      "llo"
20
#define    PRIuMAX      "llu"
21
#define    PRIxMAX      "llx"
22
#define    PRIXMAX      "llX"
23

24
#endif

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren