printf: Präzises Drucken von Hexadezimalwerten
Beim Arbeiten mit Vektoren von Zeichen kommt es häufig zu einer Diskrepanz beim Drucken einzelner Bytes im Hexadezimalformat Formatieren mit printf. Dieses Problem tritt auf, wenn versucht wird, ein einzelnes Zeichen zu drucken, das nur aus einem Byte besteht, aber stattdessen einen Multi-Byte-Wert erhält.
Der Grund für dieses Verhalten liegt in der Typübereinstimmung von printf. Der %x-Modifizierer erwartet einen vorzeichenlosen int-Parameter, und ein char wird normalerweise zu einem int heraufgestuft, wenn er an eine variable Argumentfunktion übergeben wird. Diese Aktion kann beim Drucken einzelner Zeichenwerte zu falschen Ergebnissen führen.
Um dieses Problem zu beheben, muss man das Zeichen explizit in ein vorzeichenloses Int umwandeln, um vorhersehbare Ergebnisse sicherzustellen. Der folgende Code gibt beispielsweise ein einzelnes Byte genau aus:
printf(" 0x%1x ", (unsigned)pixel_data[0]);
Es ist wichtig zu beachten, dass eine Feldbreite von eins in diesem Zusammenhang nicht besonders nützlich ist, da sie lediglich die Mindestanzahl von Ziffern angibt anzuzeigen. Wenn Sie jedoch Bytewerte als vorzeichenlose Werte behandeln und sie bei der Konvertierung in vorzeichenlose int-Werte auf Null erweitern möchten, können Sie unsigned char für den Vektor verwenden oder eine bestimmte Umwandlung durchführen:
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
Alternativ ist dies möglich Wenden Sie nach der Heraufstufung einen Maskierungsvorgang an, um das gleiche Ergebnis zu erzielen:
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
Durch Befolgen dieser Techniken können Sie sicherstellen, dass printf genau druckt Hexadezimalwerte, auch wenn es sich um einzelne Bytes handelt.
Das obige ist der detaillierte Inhalt vonWie kann ich mit printf Hexadezimalwerte einzelner Bytes genau drucken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!