您好,登錄后才能下訂單哦!
場景
接收到Pelco-d協議中的七個字節報文,將每一個字節十六進制打印,有些字符自動添加ffffff
測試代碼
#include <iostream>
#include <fstream>
#include <string>
char szQueryPanPos[7] = { 0xff, 0x01, 0x00, 0x51, 0x00, 0x00, 0x52 };
unsigned char szQueryTiltPos[7] = { 0xff, 0x01, 0x00, 0x53, 0x00, 0x00, 0x54 };
int main()
{
int i = 0;
//1打印符號char
while (i < 7)
{
printf(" %02x ", szQueryPanPos[i]);
i++;
}
printf("\n");
i = 0;
//2強制轉換符號char為無符號char打印
while (i < 7)
{
printf(" %02x ", (unsigned char)szQueryPanPos[i]);
i++;
}
printf("\n");
i = 0;
//3打印無符號char
while (i < 7)
{
printf(" %02x ", szQueryTiltPos[i]);
i++;
}
printf("\n");
return 0;
}
打印結果如下:
ffffffff 01 00 51 00 00 52
ff 01 00 51 00 00 52
ff 01 00 53 00 00 54
問題:有符號char如果其符號位為1,printf格式化輸出其十六進制數值,前面自動補全四個fffff,無符號char沒有問題
分析:有符號char型如果最高位是1,意思是超過了0x7f,當%X格式化輸出的時候,則會將這個類型的值拓展到int型的32位,
所以才會出現0xff,被擴展為ffffffff
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。