您好,登錄后才能下訂單哦!
場景
接收到Pelco-d協(xié)議中的七個字節(jié)報文,將每一個字節(jié)十六進制打印,有些字符自動添加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強制轉(zhuǎn)換符號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;
}
打印結(jié)果如下:
ffffffff 01 00 51 00 00 52
ff 01 00 51 00 00 52
ff 01 00 53 00 00 54
問題:有符號char如果其符號位為1,printf格式化輸出其十六進制數(shù)值,前面自動補全四個fffff,無符號char沒有問題
分析:有符號char型如果最高位是1,意思是超過了0x7f,當%X格式化輸出的時候,則會將這個類型的值拓展到int型的32位,
所以才會出現(xiàn)0xff,被擴展為ffffffff
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。