监测环境温度遇坑记之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类型,修改不太便。修改之后重新测试:
在这里插入图片描述

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