有符号类型引发的奇怪现象
最近在工作中需要对接LED显示屏,对接过程其实很简单,只需要按照显示屏协议进行组包,然后发送给显示屏即可。但显示屏显示出来的内容并不符合预期,肯定是哪里组包出错了,于是决定将发送给显示屏的数据包按照十六进制打印出来,对照着协议看看哪里出错了。于是就有了下面的printHex()
函数,另外为了模拟组包过程,我使用了一个int
类型的整数表示要发送给显示屏的数据。
输出如下:
在上面输出中,printHex()
函数将0xAA
输出为了0xffffffaa
,明显不符合预期,我们想要的结果是0xaa
。通过仔细观察0xffffffaa
,如果这是一个有符号整数的值,那么肯定是一个负数,我们再看一下buf[i]
数据类型,确实为有符号char
类型,而且buf[0]
的值为0xAA
,也就是说最高位为1,那么在打印的时候,就会被当成一个负数,所以输出结果就是上面看到的那样。实际上,我们应该将组包的内容全部当作无符号类型进行打印,只需要将char
修改为unsigned char
即可,修改后的代码如下:
输出如下:
这下输出正常了。
版权声明: 本文为 InfoQ 作者【jiangling500】的原创文章。
原文链接:【http://xie.infoq.cn/article/0ed62fdee2d2a1233747dfc3d】。文章转载请联系作者。
评论