我需要在不同的平台(有些是计算机,有些是电子板)之间进行数据采集的32位浮点值的通信。在我的通信协议中,我希望使用NAN浮点数进行错误通信。问题是,有很多NAN,我想使用一个,特别是0x7FA00000。
因此,我希望有一个标题,其中我定义:
#define DAQ_SYSTEM_ERROR (0x7FA00000)问题是,这是一个有效的32位整数,并执行:
float value = DAQ_SYSTEM_ERROR;不会产生想要的结果。
有没有办法在没有太多代码的情况下点缀这一点?特别是,有没有一种方法可以使用重新解释cast指令来告诉编译器我想要什么?我觉得这应该是可能的,但我办不到。
代码必须在C、C++、Objective和Swift中工作。
编辑
感谢您的评论。我只对一种价值感兴趣。其思想是获取浮点数,然后检查NAN (定义为0x7FA00000),以确定检索的值是否是有效的度量(并且应该记录),或者是否在某个地方发生了错误,在这种情况下,值应该被丢弃并升起一个标志。在“发送”平台上,某个地方的浮点值会影响0x7FA00000值。在接收平台上,与0x7FA00000相比,首先对字节进行解码,如果一切顺利,则将字节填充到浮点数中。
发布于 2014-11-03 20:48:50
没有办法在编译时指定要转换成浮点数的确切位模式。((浮子)0x7FA00000)将变成2141192192.0。获取浮点值的特定位的唯一方法是在运行时通过指针:
float fval;
uint32_t fbits = 0x7FA00000;
. . .
memmove(&fval, &fbits, sizeof float);大多数编译器也会接受:
*((uint32_t *)(& fval)) = fbits;尽管memmove()更易于移植。
https://stackoverflow.com/questions/26722803
复制相似问题