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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值