#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
ich benutze %02x Formatbezeichner, um eine 2-Zeichen-Ausgabe zu erhalten. Die Ausgabe, die ich bekomme, ist jedoch:
1010101
während ich es erwarte:01010101 .
Aragaer
%02x bedeutet mindestens 2 Ziffern drucken, voranstellen 0wenn es weniger sind. In Ihrem Fall sind es 7 Ziffern, Sie erhalten also keine zusätzlichen 0 vor.
Ebenfalls, %x ist für int, aber Sie haben eine lange. Versuchen %08lx stattdessen.
Ich habe gelernt, dass sich ‘x’ in ‘%x’ auf das Hexadezimalformat bezieht und nicht auf int. Ist es so?
– Rohit Kiran
21. Januar 2015 um 13:41 Uhr
x bezieht sich auf “Ganzzahl im Hexadezimalformat” im Gegensatz zu d was “Ganzzahl im Dezimalformat” ist. Beide akzeptieren int als auszudruckender Wert. lx und ld beide akzeptieren long.
“Beide akzeptieren int als auszugebenden Wert” –> Hmmm, "%x" ist für unsignednicht int. Gemein genug das int “funktioniert” aber, auch wenn nicht von C angegeben.
– chux – Wiedereinsetzung von Monica
23. Juni 2021 um 18:17 Uhr
Pulkit Rajput
%x ist ein Formatbezeichner, der den Hex-Wert formatiert und ausgibt. Wenn Sie einen Int- oder Long-Wert angeben, wird dieser in einen Hex-Wert konvertiert.
%02x bedeutet, wenn Ihr angegebener Wert weniger als zwei Ziffern beträgt 0 wird vorangestellt.
Sie haben einen Mehrwert geschaffen 16843009 und es wurde konvertiert 1010101 was ein Hex-Wert ist.
Ihre Zeichenfolge ist breiter als Ihre Formatbreite von 2. Es muss also nicht aufgefüllt werden.
RJM
Sie erhalten tatsächlich den richtigen Wert heraus.
Die Art und Weise, wie Sie x86 (kompatibler) Prozessor speichert Daten wie diese, ist in Little-Endian Reihenfolge, was bedeutet, dass das MSB zuletzt in Ihrer Ausgabe steht.
Also, angesichts Ihrer Ausgabe:
10101010
die letzten beiden Hex-Werte 10 sind das höchstwertige Byte (2 hex digits = 1 byte = 8 bits (zur (möglicherweise unnötigen) Klarstellung).
Also, durch umkehren die Speicherreihenfolge der Bytes, Ihr Wert ist eigentlich: 01010101.