首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言 printf 格式化輸出技巧:%02hhX 完美解決位元組十六進制列印難題

     編輯:關於C語言

痛點:位元組十六進制輸出的混亂現狀

調試網路封包、二進制資料時,常需將 unsigned char/signed char 以十六進制列印。常見問題:

  • %X 對 char 產生符號擴展:0xAB → FFFFFFFAB(有號)或 000000AB(無號)。
  • 輸出長度不一:有的 2 字元,有的 8 字元,對齊困難。
  • 需手動轉型 (unsigned char) 易忘、易錯。

神奇格式:%02hhX

char *src = ...;
printf("%02hhX", src[i]);  // 單一位元組,固定 2 位大寫十六進制,不足前補 0

格式拆解

實測對比

char a = '\xAB';          // 有號 char,值 -85
unsigned char b = '\xAB'; // 無號 char,值 171

printf("%02X\n", a);   // FFFFFFAB  (符號擴展 32 位)
printf("%02X\n", b);   // AB         (實際仍傳 32 位 000000AB,前導 0 被省略)
printf("%02hhX\n", a); // AB         (截取低 8 位,固定 2 字元)
printf("%02hhX\n", b); // AB

為何 %02hhX 是最佳選擇

  1. 型別無關:無論 signed/unsigned char、int 截斷,皆正確取低 8 位。
  2. 格式統一:固定 2 字元大寫,日誌對齊完美。
  3. 標準 C99:現代編譯器(GCC、Clang、MSVC)全支援。

補充:相關格式速查

元件含義
hh長度修飾符:指定對應引數為 signed char 或 unsigned char(1 位元組)
X大寫十六進制整數輸出
02最寬度 2,不足前補 0
格式輸出範例用途
%02hhXAB單位元組十六進制(推薦)
%02hX00ABshort (2 位元組)
%04X0000ABCDint (4 位元組)
%hhxab小寫版

工具輔助:hexdump

hexdump -C file.bin  # 含位移、十六進制、ASCII 三欄,注意大小端序

總結

拋棄手動轉型與不定長輸出,全面採用 %02hhX 列印位元組十六進制,是 C 語言二進制資料調試的專業標準寫法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved