首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在浮子中抛出一个Int32 NAN

在浮子中抛出一个Int32 NAN
EN

Stack Overflow用户
提问于 2014-11-03 20:39:46
回答 1查看 488关注 0票数 0

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

因此,我希望有一个标题,其中我定义:

代码语言:javascript
复制
#define DAQ_SYSTEM_ERROR  (0x7FA00000)

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

代码语言:javascript
复制
float value = DAQ_SYSTEM_ERROR;

不会产生想要的结果。

有没有办法在没有太多代码的情况下点缀这一点?特别是,有没有一种方法可以使用重新解释cast指令来告诉编译器我想要什么?我觉得这应该是可能的,但我办不到。

代码必须在C、C++、Objective和Swift中工作。

编辑

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-03 20:48:50

没有办法在编译时指定要转换成浮点数的确切位模式。((浮子)0x7FA00000)将变成2141192192.0。获取浮点值的特定位的唯一方法是在运行时通过指针:

代码语言:javascript
复制
float fval;
uint32_t fbits = 0x7FA00000;

. . .

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

大多数编译器也会接受:

代码语言:javascript
复制
*((uint32_t *)(& fval)) = fbits;

尽管memmove()更易于移植。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26722803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档