gpt4 book ai didi

c - 如何使用直接来自函数的返回值作为位串而不是格式化数字?

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:28 26 4
gpt4 key购买 nike

如何直接从函数中获得 intVariable = *(int*) &floatVariable 的效果,而不必先将函数的输出保存到虚拟变量?

float functionWithFloatTypedReturn(int input) {
[enter code here]
return serialStringStruct.floatRetVal;
}
...
intVariable = [desired code] functionWithFloatTypedReturn(commandCode);

背景:我有一个函数可以读取别人硬件给出的串行响应。遗留代码和对语言能力的好奇心促使人们继续使用单一功能。如果函数返回数值“1”,则它可能是 0x3f800000 或 0x1,具体取决于函数的输入(这决定了向硬件提供的命令)。来自硬件的串行字符串通过调用 memcpy 独立于类型分解为结构。

最佳答案

intVariable = (union { float f; int i; }) { functionWithFloatTypedReturn(commandCode) } .i;

这使用包含 union 的复合文字来重新解释值的字节(C 1999 及更高版本支持)。

请注意,通常建议使用无符号整数而不是 int 来访问浮点编码的位,因为无符号整数不太容易出现某些问题,例如位的符号问题轮类。

您还必须确保您使用的两种类型在您的 C 实现中具有相同的字节数。

此代码无需中间 C 变量即可完成重新解释。然而,这并不意味着它在机器语言实现方面会更高效。

关于c - 如何使用直接来自函数的返回值作为位串而不是格式化数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205474/

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