监测环境温度遇坑记之unsigned char char
?在項(xiàng)目測(cè)試階段呢,前一篇文章已經(jīng)成功接收到了數(shù)據(jù),但是對(duì)接收到的數(shù)據(jù)不是很滿意。客戶端發(fā)送的報(bào)文頭是0xfd 0xfd,報(bào)文尾是0xdf 0xdf ,但是服務(wù)器端接收到的報(bào)頭報(bào)尾卻是0xfffffffd 0xfffffffd 0xffffffdf 0xffffffdf,原因是自動(dòng)對(duì)高位進(jìn)行了擴(kuò)展。于是百度上一頓查找,最終發(fā)現(xiàn)原因是沒(méi)有正確使用unsigned char 和 char這兩種數(shù)據(jù)類型。
?在c語(yǔ)言中char 默認(rèn)的是signed char類型,有符號(hào)的字符型,最高位表示符號(hào)位,其取值范圍是-128~127,unsigned char 是無(wú)符號(hào)類型,最高位不表示符號(hào)位,其取值范圍是0~255。對(duì)于計(jì)算機(jī)而言,unsiged cha 和 char 沒(méi)有什么區(qū)別,但是通過(guò)%x格式打印到終端的時(shí)候會(huì)對(duì)最高位進(jìn)行位擴(kuò)展,讓我以為兩端接收到的數(shù)據(jù)不一致,為了打印出來(lái)一致,有兩種解決辦法。
- 將客戶端的數(shù)據(jù)包c(diǎn)har 類型改為unsigned char類型。
- 將接收到的數(shù)據(jù)使用memcpy內(nèi)存拷貝到unsigned char型內(nèi)存里面。memcpy這個(gè)函數(shù)參數(shù)對(duì)類型沒(méi)有要求,操作比較方便。
?在這里我是采用第二種辦法,因?yàn)槌绦蛑写蟛糠诸愋筒捎胏har類型,修改不太便。修改之后重新測(cè)試:
總結(jié)
以上是生活随笔為你收集整理的监测环境温度遇坑记之unsigned char char的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Swift-ScrollView轮播图的
- 下一篇: MySQL国内镜像下载地址