溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

printf 十六進制打印有符號char注意事項

發(fā)布時間:2020-06-14 20:14:41 來源:網(wǎng)絡 閱讀:1211 作者:fengyuzaitu 欄目:編程語言

場景
 接收到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


向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI