文字のベクトル (pixel_data) を操作する場合、単一バイトを 16 進値として印刷します (printf(" 0x) %1x "、pixel_data[0])) は予期せず 4 バイトの整数を生成する可能性があります意図した値 (0xf5) ではなく (0xfffffff5) です。
Printf は通常、%x 修飾子に符号なし整数パラメーターを期待します。ただし、char は、printf などの varargs 関数に渡されると、int に昇格されます。このプロモーションにより、追加のバイトが出力されます。
予測可能な結果を保証するには、char を unsigned int に明示的にキャストします。
printf(" 0x%1x ", (unsigned)pixel_data[0]);
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
%1x フィールド幅は、表示する最小桁数を指定します。ただし、少なくとも 1 桁の数字が常に必要となるため、このコンテキストでは有用性が限られています。
以上がChar ベクトルから 16 進数のバイトを出力すると、「printf」で予期しない出力が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。