首頁 >後端開發 >C++ >從 Char 向量列印十六進位位元組時,為什麼 `printf` 顯示意外的輸出?

從 Char 向量列印十六進位位元組時,為什麼 `printf` 顯示意外的輸出?

Barbara Streisand
Barbara Streisand原創
2024-12-07 07:04:111003瀏覽

Why Does `printf` Show Unexpected Output When Printing Hexadecimal Bytes from a Char Vector?

列印十六進位位元組時printf 出現意外輸出

使用字元向量(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]);

注意事項變數類型

  • 將pixel_data定義為unsigned char,將位元組視為無符號值。
  • 或者,在 printf 語句中轉換為 unsigned char:
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
  • 轉換為 unsigned int 時使用遮罩操作進行零擴充:
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);

理解領域寬度

%1x 欄位寬度指定要顯示的最小位數。然而,它在這種情況下的用處有限,因為始終需要至少一位數字。

以上是從 Char 向量列印十六進位位元組時,為什麼 `printf` 顯示意外的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn