该问题与char与unsigned char之间的转换关系有关。
首先在内存中,char与unsigned char没有什么不同,都是一个字节。但char的最高位为符号位,可以表示的数值范围为-127~127。当首位为0时,表示为正数;首位为1时,表示为负数。而unsigned char没有符号位。
当把char类型赋值给unsigned char类型时,若首位为0,则二者没有区别,但当首位为1时,系统认为最高位为符号位,会对最高位进行扩展。一般是从字节扩展到字,字扩展到双字,双字扩展到四字。因此在扩展时会在前面插入12个1。即,char c = 0x80。二进制表示为1000 0000,当它赋值给unsigned char时,由于首位为1,被认为是符号位,并进行扩展,结果为0XFFFFFF80,二进制表示为1111 1111 1111 1000 0000。
解决该问题的方法便是,将char类型改为unsigned类型即可。
因此在做数据处理时,应当注意做好类型的对应。
关于字扩展相关知识请参考https://www.zybang.com/question/06280df82949b038ea8d91b96cab1265.html
串口通信接收端通信内容多出三个0xFF的问题
最新推荐文章于 2024-05-12 19:15:25 发布