有符号类型引发的奇怪现象
最近在工作中需要对接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】。文章转载请联系作者。
 
  
  
  
  
  
  
  
  
  
    
评论