2016-04-10 17 views
-4

Ich mag würde ein unsigned int wie drucken: 0x000000 weil ich:C - printf unsigned int

# define OFFSET (u32) 0x21FE014 
typedef unsigned int u32; 

Als ich printf wie folgt verwenden:

printf("Offset: %zu\n", OFFSET); 

Er kehrte mir: 35643412

+0

Versuchen Sie '"% # 08x "'. – user3386109

+0

Keine homebrew festen Weite Typen verwenden! Verwenden Sie 'stdint.h' und' limits.h'. Letzteres enthält Makros für die stdlib-Formatzeichenfolgen. 'int' hat nicht garantiert 32 Bit. – Olaf

+1

Und wenn Sie Typen wie 'uint32_t' aus' 'verwenden, sollten Sie' PRIX32' aus '' verwenden, um Großbuchstaben anzugeben (in voller Größe, printf ("Offset: 0x% .8" PRIX32 "\ n ", OFFSET)'). Obwohl '#' '0x' oder' 0X' vor der Hexadezimalausgabe ausgibt, ist der Fall von 'x' gleich dem Fall der Hexadezimalziffern. Es sieht so aus, als ob Sie die Kleinbuchstaben "x" und Großbuchstaben bevorzugen (ich auch), also funktionieren die Standardformate nicht nach Ihren/meinen Anforderungen. –

Antwort

0

%x ist printf Format für hexadezimale Ausgabe:

0

%zu bedeutet Druck des entsprechenden size_t Argument als ganze Zahl ohne Vorzeichen in der Basis 10

Was Sie wollen, ist %x eine ganze Zahl ohne Vorzeichen in Hexadezimal ohne Präfix zu drucken; Wenn Sie das Präfix 0x wirklich möchten, verwenden Sie %#x.

Verwandte Themen