我具有與十六進制數據一個C程序,其欲迭代代碼,例如用於打印出每個十六進制的字節:Ç打印十六進制字節
char input[] = "\x31\xd2\xb2\x30";
for (int i = 0; i < strlen(input); i++) {
printf("%02X\n", input[i]);
}
但是,輸出是不是我期望的,例如在上述打印:
31
FFFFFFD2
FFFFFFB2
30
我也試圖投輸出作爲(unsigned int)
,但是我接收到相同的輸出。
有人可以用這個簡單的腳本指出問題嗎?
在你的系統上,'char'可能是'signed'。所以數據'\ xd2'是負數。您將該值傳遞給'printf',並將其提升爲也被簽名的'int'。但是格式說明符'%X'期待'unsigned int'並相應地解釋二進制數據。它是*未定義的行爲*。 –