Dies ist eher eine merkwürdige als eine wichtige Frage. Warum wird beim Drucken von Hex als 8-stellige Zahl mit führenden Nullen %#08X
nicht das gleiche Ergebnis angezeigt wie 0x%08X
?
Wenn ich versuche, das erstere zu verwenden, wird das 08
Formatierungsflag entfernt und es funktioniert nicht nur mit 8
.
Wieder war ich nur neugierig.
0x%.8X
? Das wird mit Nullen gefüllt. (Das0x
ist nur eine Präambel, aber das wissen Sie wahrscheinlich schon).Antworten:
Der
#
Teil gibt Ihnen eine0x
in der Ausgabezeichenfolge. Das0
und diex
Anzahl gegen Ihre "8" Zeichen, die im08
Teil aufgeführt sind. Sie müssen nach 10 Zeichen fragen, wenn Sie möchten, dass es gleich ist.Das Ändern der Groß-
x
und Kleinschreibung von wirkt sich auch auf die Schreibweise der ausgegebenen Zeichen aus.quelle
14F
?i = 0;
in den verwendeten Versionen%#
das0x
Präfix nicht enthalten ist.Die "0x" zählt für die acht Zeichen. Du brauchst
"%#010x"
.Beachten Sie, dass
#
sich nicht die 0x 0 anhängen - das Ergebnis wird sein ,0000000000
- so dass Sie wahrscheinlich sollte eigentlich nur benutzen"0x%08x"
sowieso.quelle
Die
%#08X
Konvertierung muss vor dem Wert mit erfolgen0X
. das ist vom Standard gefordert. Der Standard enthält keine Hinweise darauf, dass das#
Verhalten des08
Teils der Spezifikation geändert werden sollte, außer dass das0X
Präfix als Teil der Länge gezählt wird (daher möchten / müssen Sie es möglicherweise verwenden%#010X
. Wenn Sie wie ich Ihr Hex mögen, das als dargestellt wird0x1234CDEF
, dann müssen Sie verwenden0x%08X
, um das gewünschte Ergebnis zu erzielen. Sie könnten verwenden,%#.8X
und das sollte auch die führenden Nullen einfügen.Probieren Sie Variationen des folgenden Codes aus:
Auf einem RHEL 5-Computer und auch unter Mac OS X (10.7.5) war die Ausgabe:
Ich bin ein wenig überrascht über die Behandlung von 0; Ich bin mir nicht
0X
sicher , warum das Präfix weggelassen wird, aber bei zwei separaten Systemen muss es Standard sein. Es bestätigt meine Vorurteile gegen die#
Option.Die Behandlung von Null entspricht dem Standard.
(Betonung hinzugefügt.)
Beachten Sie, dass bei
%#X
Verwendung Großbuchstaben für die hexadezimalen Ziffern und0X
als Präfix verwendet werden. Bei Verwendung von%#x
werden Kleinbuchstaben für die hexadezimalen Ziffern und0x
als Präfix verwendet. Wenn Sie0x
Präfix und Großbuchstaben bevorzugen , müssen Sie diese0x
separat codieren :0x%X
. Natürlich können bei Bedarf auch andere Formatmodifikatoren hinzugefügt werden.Verwenden Sie zum Drucken von Adressen die
<inttypes.h>
Kopfzeile sowie denuintptr_t
Typ und dasPRIXPTR
Formatmakro:Beispielausgabe:
Wählen Sie Ihr Gift auf der Länge - ich finde, dass eine Genauigkeit von 12 gut für Adressen auf einem Mac funktioniert, auf dem macOS ausgeführt wird. In Kombination mit der
.
Angabe der Mindestgenauigkeit (Ziffern) werden Adressen zuverlässig formatiert. Wenn Sie die Genauigkeit auf 16 einstellen, sind die zusätzlichen 4 Ziffern meiner Erfahrung nach auf dem Mac immer 0, aber es gibt sicherlich einen Grund, 16 anstelle von 12 in tragbarem 64-Bit-Code zu verwenden (aber Sie würden 8 für verwenden 32-Bit-Code).quelle