Formatbezeichner %02x

Lesezeit: 2 Minuten

Benutzeravatar von user2717225
Benutzer2717225

Ich habe ein einfaches Programm:

#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 .

Benutzeravatar von aragaer
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.

    – Aragaer

    22. Januar 2015 um 0:28 Uhr


  • Lesen Sie der Vollständigkeit halber auch stackoverflow.com/questions/15108932/c-the-x-format-specifier und cplusplus.com/reference/cstdio/printf

    – randmin

    22. März 2018 um 23:12 Uhr

  • “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

Benutzeravatar von PulkitRajput
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.

Benutzeravatar von RJM
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.

Hoffe das klärt sich auf!

1400700cookie-checkFormatbezeichner %02x

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy