使用字元向量(pixel_data) 時,將單一位元組列印為十六進位值( printf(" 0x %1x ", Pixel_data[0])) 可能會意外產生一個四位元組整數(0xfffffff5)而不是預期值 (0xf5)。
Printf 通常需要 %x 修飾符的無符號整數參數。然而,當傳遞給 printf 等 varargs 函數時,char 會被提升為 int。此提升會導致列印額外的位元組。
為了確保可預測的結果,請將char 明確轉換為無符號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 欄位寬度指定要顯示的最小位數。然而,它在這種情況下的用處有限,因為始終需要至少一位數字。
以上是從 Char 向量列印十六進位位元組時,為什麼 `printf` 顯示意外的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!