gpt4 book ai didi

c - 从内联字节重新组装 float

转载 作者:太空狗 更新时间:2023-10-29 14:53:43 26 4
gpt4 key购买 nike

我在 PIC32MX 系列微处理器上使用 HiTech PICC32,但我认为这个问题对于任何了解 C 的人来说都足够普遍。(这几乎等同于 C90,其中 sizeof(int) = sizeof(long) = sizeof( float ) = 4.)

假设我读取了一个表示 float 的 4 字节数据。我可以使用以下方法快速将其转换为实际浮点值:

#define FLOAT_FROM_WORD(WORD_VALUE) (*((float*) &(WORD_VALUE)))

但这只适用于左值。例如,我不能在像这样的函数返回值上使用它:

FLOAT_FROM_WORD(eeprom_read_word(addr));

是否有一种简短而有效的内联方式,即无需函数调用或临时变量?老实说,我没有理由避免函数调用或额外的 var,但这让我很烦恼。一定有一种方法是我想念的。

补充:我没有意识到 WORD 实际上是一个常见的 typedef。我更改了宏参数的名称以避免混淆。

最佳答案

你可以用另一种方式来获取返回值

float fl;
*(int*)&fl = eeprom_read_word(addr);

#define WORD_TO_FLOAT(f)  (*(int*)&(f))

WORD_TO_FLOAT(fl) = eeprom_read_word(addr);

或如 R Samuel Klatchko 所建议的那样

#define  ASTYPE(type, val) (*(type*)&(val))
ASTYPE(WORD,fl) = eeprom_read_word(addr);

关于c - 从内联字节重新组装 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234738/

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