Beim Arbeiten mit einem Vektor von Zeichen (pixel_data) wird ein einzelnes Byte als Hexadezimalwert gedruckt (printf(" 0x %1x ", pixel_data[0])) kann unerwartet eine Vier-Byte-Ganzzahl (0xfffffff5) erzeugen der beabsichtigte Wert (0xf5).
Printf erwartet normalerweise einen vorzeichenlosen Ganzzahlparameter für den %x-Modifikator. Allerdings wird ein Zeichen zu einem int heraufgestuft, wenn es an eine varargs-Funktion wie printf übergeben wird. Diese Heraufstufung führt zum Drucken zusätzlicher Bytes.
Um vorhersehbare Ergebnisse zu gewährleisten, wandeln Sie das Zeichen explizit in ein vorzeichenloses int um:
printf(" 0x%1x ", (unsigned)pixel_data[0]);
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
Die %1x Feldbreite gibt die Mindestanzahl der anzuzeigenden Ziffern an. Allerdings ist der Nutzen in diesem Zusammenhang begrenzt, da immer mindestens eine Ziffer benötigt wird.
Das obige ist der detaillierte Inhalt vonWarum zeigt „printf' beim Drucken von Hexadezimalbytes aus einem Zeichenvektor eine unerwartete Ausgabe an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!