在浮子中铸造Int32 NAN
Cast an Int32 NAN in a float
我需要在不同的平台(有些是计算机,有些是电子板)之间通信32位浮点值以进行数据采集。在我的通信协议中,我希望使用NAN浮点来传达错误。问题是,有很多NAN,我想使用一个,特别是0x7FA00000。
所以,我想有一个标题,我在其中定义:
#define DAQ_SYSTEM_ERROR (0x7FA00000)
问题是,这是一个有效的32位整数,并且正在执行:
float value = DAQ_SYSTEM_ERROR;
不会产生期望的结果。
有没有一种方法可以在没有太多代码的情况下点出这个?特别是,有没有一种方法可以使用reexplatecast指令来告诉编译器我想要的?我觉得这应该是可能的,但我做不到
代码必须使用C、C++、Objective-C和Swift。
编辑
感谢您的评论。我确实只对一个价值感兴趣。其想法是获取浮点值,然后对照NAN(定义为0x7FA00000
)进行检查,以了解检索到的值是否是有效的测量值(并且应该记录),或者是否在某个地方发生了错误,在这种情况下,应该丢弃该值并升起标志。在"发送"平台上,某个浮动值受到0x7FA00000
值的影响。在接收平台上,首先对字节进行解码,与0x7FA00000
进行比较,然后如果一切顺利,则将其填充在浮点中。
在编译时无法指定要转换为浮点的确切位模式。((浮点)0x7FA00000)将变为2141192192.0。将特定位放入浮点值的唯一方法是在运行时通过指针:
float fval;
uint32_t fbits = 0x7FA00000;
. . .
memmove(&fval, &fbits, sizeof float);
大多数编译器也会接受:
*((uint32_t *)(& fval)) = fbits;
尽管memmove()更便于移植。
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 输出是NaN,如何
- 为什么我在输出端得到 nan?
- 提升反序列化对象具有 nan 或 -nan 值
- Is !NaN not a NaN?
- NaN 上的宇宙飞船操作员
- C++ STL 排序会检查 NaN 吗?
- C++ 每次运行程序时我都会"nan"输出的问题
- 复制 -nan 表示浮点数,AVX __m256 复制后显示 0
- 如何使用 Node-addon-API 实现 node-nan 回调
- 为什么在 Go 中将 float64 转换为 int32 会给出负数?
- 为什么我的双变量通过添加 c++ 显示 nan?
- nan() 函数的参数
- 为什么 acos() 在使用点积的结果时会导致"nan(ind)"?
- 如何在 c++ 中处理 -nan 输出
- 为什么这段代码返回 -nan(ind)?C++
- Pybind11+nan节点模块冲突
- Nan::ObjectWrap to Napi::Object Wrap 无法访问 JavaScript 中的属性
- 第二个 while 循环未运行,将值设置为 "nan"
- 在浮子中铸造Int32 NAN