Heim > Backend-Entwicklung > C++ > Warum zeigt „printf' beim Drucken eines Bytes eine unerwartete Hex-Ausgabe an?

Warum zeigt „printf' beim Drucken eines Bytes eine unerwartete Hex-Ausgabe an?

Linda Hamilton
Freigeben: 2024-12-20 13:09:13
Original
912 Leute haben es durchsucht

Why Does `printf` Show Unexpected Hex Output When Printing a Byte?

Verstehen der unerwarteten Ausgabe von printf beim Drucken eines Bytes als Hexadezimal

Bei der Arbeit mit Vektordatentypen wie pixel_data, die char-Elemente enthalten, kommt es häufig dazu Beim Versuch, ein einzelnes Byte im Hexadezimalformat zu drucken, kann es zu unerwarteten Ergebnissen kommen. Insbesondere könnte das Drucken von pixel_data[0] mit printf(" 0x%1x ", pixel_data[0] ) 0xfffffff5 anstelle des erwarteten 0xf5 ergeben.

Dieses Verhalten ergibt sich aus einer Eigenschaft von printf, wo der %x-Modifikator erwartet als Argument eine ganze Zahl ohne Vorzeichen. Daher wird der char-Wert, der bei der Bereitstellung an eine varargs-Funktion normalerweise zu einer Ganzzahl heraufgestuft wird, von printf als int behandelt.

Um zuverlässige Ergebnisse zu erhalten, wird eine explizite Umwandlung in einen vorzeichenlosen int-Wert empfohlen :

printf(" 0x%1x ", (unsigned)pixel_data[0] );
Nach dem Login kopieren

Außerdem ist eine Feldbreite von eins möglicherweise nicht ideal, da sie eine Mindestanzahl der anzuzeigenden Ziffern angibt und dies immer mindestens eine Ziffer sein wird verwendet.

Wenn char auf Ihrem System als vorzeichenbehafteter Typ behandelt wird, kann die Konvertierung zur Generierung großer vorzeichenloser int-Werte (z. B. fffffff5) für negative char-Werte führen. Um sicherzustellen, dass Bytewerte als vorzeichenlos behandelt werden, verwenden Sie unsigned char für pixel_data, wandeln Sie es über unsigned char um oder verwenden Sie eine Maskierungsoperation:

printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0] );
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU );
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum zeigt „printf' beim Drucken eines Bytes eine unerwartete Hex-Ausgabe an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage