gpt4 book ai didi

c++ - 将 Int32 NAN 转换为 float

转载 作者:行者123 更新时间:2023-11-28 06:36:19 24 4
gpt4 key购买 nike

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

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

#define DAQ_SYSTEM_ERROR  (0x7FA00000)

问题是,这是一个有效的 32 位整数并且在做:

float value = DAQ_SYSTEM_ERROR;

没有产生预期的结果。

有没有办法不用太多代码就可以做到这一点?特别是,有没有办法使用 reinterpret cast 指令让编译器满足我的要求?我觉得这应该是可能的,但我做不到。

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

编辑

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

最佳答案

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

float fval;
uint32_t fbits = 0x7FA00000;

. . .

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

大多数编译器也会接受:

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

虽然 memmove() 更便携。

关于c++ - 将 Int32 NAN 转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com