将一个Int32 NAN转换为浮点数

时间:2014-11-03 20:39:46

标签: c++ objective-c c swift

我需要在不同平台(有些是计算机,有些是电子板)之间传递32位浮点值以进行数据采集。 在我的通信协议中,我想使用NAN浮动来传达错误。问题是,有很多NAN,我想使用一个特别是0x7FA00000。

所以,我想要一个我定义的标题:

#define DAQ_SYSTEM_ERROR  (0x7FA00000)

问题是,这是一个有效的32位整数并执行:

float value = DAQ_SYSTEM_ERROR;

没有产生预期的结果。

有没有办法在没有太多代码的情况下点对此?特别是,有没有办法使用reinterpret cast指令给编译器我想要的东西?我认为它应该是可能的,但我无法管理它。

代码必须适用于C,C ++,Objective-C和Swift。

修改

感谢您的评论。我确实只对一个价值感兴趣。想法是获取浮点数,然后检查NAN(定义为0x7FA00000)以确定检索的值是否是有效的测量值(并且应该被记录)或者是否在某处发生错误,在这种情况下值应该被丢弃并举起一面旗帜。关于"发送"平台,某个浮点值会影响0x7FA00000值。在接收平台上,字节首先被解码,与0x7FA00000进行比较,然后如果一切顺利,则填充在浮点数中。

1 个答案:

答案 0 :(得分:1)

无法在编译时指定要转换为float的精确位模式。 ((float)0x7FA00000)将变为2141192192.0。将特定位转换为浮点值的唯一方法是在运行时通过指针:

float fval;
uint32_t fbits = 0x7FA00000;

. . .

memmove(&fval, &fbits, sizeof float);

大多数编译器也会接受:

*((uint32_t *)(& fval)) = fbits;

虽然memmove()更便携。