我需要在不同平台(有些是计算机,有些是电子板)之间传递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()更易于移植。

10-05 18:44