Ein Format von "%lux"
wird als "%lu"
(unsigned long, dezimal) behandelt, gefolgt von einem Buchstaben x
.
Das Format "%x"
erfordert ein Argument vom unsigned-Typ; Es gibt keinen (direkten) Mechanismus, um vorzeichenbehaftete Ganzzahlen im hexadezimalen Format zu drucken.
Das Format zum Drucken eines unsigned long
-Werts in Hexadezimal ist "%lx"
. (x
ist hexadezimal, d
decimal signiert ist, u
unsigned decimal ist, jede von ihnen kann mit l
für lange qualifiziert werden.)
Hinweis, dass der Wert 13835058055298940928
mindestens einen 64-bit unsigned Typen erfordert es zu speichern, ohne Überlauf . Der Typ unsigned long
ist mindestens 32 Bit; es ist 64 Bits auf einige Systeme, aber keineswegs alle. Wenn Sie möchten, dass Ihr Code portabel ist, sollten Sie den Typ unsigned long long
statt unsigned long
verwenden. Das Format zum Drucken eines unsigned long long
-Werts in Hexadezimalformat lautet "%llx"
.
Aus Gründen der Klarheit ich vorangehen in der Regel hexadezimale Ausgabe mit 0x
, so ist es dem Leser klar, dass es sich um eine Hexadezimalzahl ist:
printf("0x%llx\n", some_unsigned_long_long_value);
(Sie können das gleiche Ergebnis mit %#llx
erreichen, aber ich finde es einfacher, schreibe 0x
aus, um dich an die Bedeutung des #
Flags zu erinnern.)
Hexadezimal ist egal ob signed oder unsigned - x ist alles was du brauchst. –
'% lux' scheint wie'% lu' + 'x' behandelt zu werden –
Und Sie übergeben' 1024' anstelle von '256' als Pufferspeicher –