【C编程问题集中营】在不同编译器下float强转为无符号int的表现
关注且发送"101"即可获取完整全文内容;
一、问题背景
两个ECU之间通过某种通信方式按照某种协议进行交互时,如果需要发送的数据是单精度浮点类型的负数,一般我们会通过以下两种方式对数据进行处理然后发送:
- 发送端在原数据的基础上加上固定的offset正值,使之转化为单精度浮点类型的正数后,强转为无符号整型进行发送,然后接收端将数据强转为单精度浮点类型后减去固定的offset正值就基本得到一定精度的数据了。(暂不考虑小数点后的精度)
- 发送端将原数据也就是单精度浮点类型的负数通过一定的强转手段直接转换成无符号整型,然后进行发送,接收端接收到这个无符号整型数据后先强转为有符号整型再转换为单精度浮点类型,即可得到一定精度的原始数据了。(暂不考虑小数点后的精度)
上述第一种方法只要是offset设置的合理理论上不存在什么问题,本文主要描述的问题主要是出现在第二种方法;
当采用第二种方法进行有符号类型数据的传输时,单精度浮点类型的数据在直接强转为无符号整型时,不同编译器下的表现是不同的,下面分别用gcc以及ghs编译器进行测试;