Ubuntu 17.04编译串口发送16进制数据包报了个神奇的错误—续

根据上篇文章的说明,我已经发现在Linux系统的串口通信中,发送的16进制数据包中当有大于一定值的情况时,在Clion 中编译就会报错(该编译器属于Qt 5.8 MingW )的现象。经过自己一番尝试和查找,已经解决了编译报错的情况。

请看以下代码:

char data[9] = {0x11,0x22,0x33,0x11,0x22,0x33,0x11,0x22,(char)0x88};
        为什么这样就可以编译通过,目前我也不是很清楚,只是认为对于以上的数据构成情况时,可能其数据类型有默认的类型,因而导致报错。

error: narrowing conversion of ‘136’ from ‘int’ to ‘char’ inside { } [-Wnarrowing]


        但是,我又发现了一个新的问题。

原来我以为当要发送的16进制数据包中,一旦前半位有大于等于8时,就会编译报错。但是我后来又尝试了其他的情况,最终发现

1. 当发送数组中的数据属于这种样式时,编译会报错(0x80,0x90,0xA0...): narrowing conversion of data  from ‘int’ to ‘char’ inside { } [-Wnarrowing]

2. 当发送数组中的数据属于这种样式时,编译就不会报错(0x08,0x08,0x0A...)

3. 当发送数组中的数据符合第一种情况时,将char 数组写成以下格式便可编译通过:char data[9] = {0x11,0x22,0x33,0x11,0x22,0x33,0x11,0x22,(char)0x88};

        因此,我认为编译器报错很可能和16进制数据的最高位数有关(这可能和我的串口属性配置有关)。

        具体的,还在研究中。。。

        若有兴趣的话,欢迎大家一起来交流学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值