【发布时间】:2012-09-03 04:58:37
【问题描述】:
我的程序从文件中读取 4 个字节的 IEEE 754 浮点数。我需要将这些字节可移植地转换为我的 C 编译器浮点类型。换句话说,我的 C 程序需要一个带有原型 float IEEE_754_to_float(uint8_t raw_value[4]) 的函数。
【问题讨论】:
-
由于字节顺序,不会有 100% 可移植的方式。但我敢打赌,您只需一个简单的
union就可以逃脱惩罚。 -
@Mysticial,我想知道这一点。我知道对于大端整数,有一种 100% 可移植的方式来实现这一点。为什么浮点数应该有所不同?
-
嗯,首先,你不能移动浮点数。所以你不能仅仅使用浮点运算来逐字节地“构造”一个浮点值。
-
@Mysticial,但浮点数只是一个数字的另一个数字的幂,以及一个符号位。是不是可以只做
sign_bit * powf(x, y)? -
你可以那样做。如果性能很重要,可能不是最好的主意。 (您还必须检查无穷大和 NaN ...)但另一个问题是输入字节的字节序。所以除了使用预处理器检查字节序然后选择适当的实现之外,我看不到任何其他方法。
标签: c floating-point ieee-754