我需要在不同平台(有些是计算机,有些是电子板)之间传递32位浮点值以进行数据采集。
在我的通讯协议中,我想使用NAN float来传达错误。问题是,有很多NAN,我想特别使用0x7FA00000。
因此,我想在其中定义一个标题:
#define DAQ_SYSTEM_ERROR (0x7FA00000)
问题是,这是一个有效的32位整数,并且正在执行以下操作:
float value = DAQ_SYSTEM_ERROR;
无法产生预期的结果。
有没有办法在没有太多代码的情况下将其加点?特别是,有没有一种方法可以使用reinterpret cast指令来编译我想要的东西?我觉得应该有可能,但我无法应付。
该代码必须在C,C ++,Objective-C和Swift中运行。
编辑
谢谢您的意见。我确实只对一种价值感兴趣。想法是获取浮点数,然后针对NAN(定义为
0x7FA00000
)进行检查,以了解检索到的值是否是有效的度量值(并应记录)或是否在某处发生错误,在这种情况下,应将该值丢弃并举起了旗帜。在“发送”平台上,某个浮点值会影响0x7FA00000
值。在接收平台上,与0x7FA00000
相比,首先解码字节,如果一切顺利,则将其填充为浮点数。 最佳答案
无法指定在编译时转换为浮点数的确切位模式。 ((float)0x7FA00000)将变为2141192192.0。将特定位转换为浮点值的唯一方法是在运行时通过指针:
float fval;
uint32_t fbits = 0x7FA00000;
. . .
memmove(&fval, &fbits, sizeof float);
大多数编译器还将接受:
*((uint32_t *)(& fval)) = fbits;
尽管memmove()更易于移植。