出现的问题及解决思路
问题:当在终端数数据 FFFFFF010203040AFE 时,直接打印输入的信息,FF都变成 7F ,百思不得其解,尝试了几种办法:
-
考虑到数据类型,就去查了一下,char类型数据的取值范围是(-128~127),按照这个考虑,输入的最大数值是7F,就去考虑了其他原因。
注:当时没有有考虑到如果是因为最大表示的数是127,那么FF表示的数也应该是-1而不是7F. -
做了下面这样一个尝试:
char a =0xff;
unsigned char b =0xff;
printf("\na=%x",a);
printf("\na=%d",a);
printf("\na=%x",b);
printf("\na=%d",b);
得到如下结果:
a=ff
a=255
a=ff
a=255
这就证实了unsigned char是(0-255),无论char还是unsigned char 都可以输出FF这样一个数据,这说明系统是没有问题的。神奇的就是接收到的数据的最高位的 1 不见了,就开始捋程序,不再只关注receive232函数,从头开始捋。
3. 从头捋程序,程序的内容不多,能出问题的就在程序的设置上,看到了termio结构体,里面有这一句:
newtermios.c_iflag |= (INPCK | ISTRIP);//启动输入就校验,去掉第八位
看到这一句思路就清晰了,八位数据位最高位失踪的原因找到了,就去查termios结构体的设置
https://blog.csdn.net/vevenlcf/article/details/51096122
把那一行代码进行了修改,如下:
newtermios.c_iflag |= INPCK;
问题就这样解决了
心得总结
这个程序写起来不难,难在细节,不是