監測環境溫度遇坑記之unsigned char && char

在這裏插入圖片描述
 在項目測試階段呢,前一篇文章已經成功接收到了數據,但是對接收到的數據不是很滿意。客戶端發送的報文頭是0xfd 0xfd,報文尾是0xdf 0xdf ,但是服務器端接收到的報頭報尾卻是0xfffffffd 0xfffffffd 0xffffffdf 0xffffffdf,原因是自動對高位進行了擴展。於是百度上一頓查找,最終發現原因是沒有正確使用unsigned char 和 char這兩種數據類型。

 在c語言中char 默認的是signed char類型,有符號的字符型,最高位表示符號位,其取值範圍是-128~127,unsigned char 是無符號類型,最高位不表示符號位,其取值範圍是0~255。對於計算機而言,unsiged cha 和 char 沒有什麼區別,但是通過%x格式打印到終端的時候會對最高位進行位擴展,讓我以爲兩端接收到的數據不一致,爲了打印出來一致,有兩種解決辦法。

  • 將客戶端的數據包char 類型改爲unsigned char類型。
  • 將接收到的數據使用memcpy內存拷貝到unsigned char型內存裏面。memcpy這個函數參數對類型沒有要求,操作比較方便。
void *memcpy(void *dest, const void *src, size_t n);

 在這裏我是採用第二種辦法,因爲程序中大部分類型採用char類型,修改不太便。修改之後重新測試:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章