我想用 C 语言将 4 个字节重新解释为 IEEE 754 单精度二进制。
为了获取表示float
的字节,我使用了:
num = *(uint32_t*)&MyFloatNumber;
aux[0] = num & 0xFF;
aux[1] = (num >> 8) & 0xFF;
aux[2] = (num >> 16) & 0xFF;
aux[3] = (num >> 24) & 0xFF;
- num 是 uint32_t。
- aux[] 是 int[4]。
要将字节重新解释为浮点
,我正在尝试:
Buff = *(float*)&aux;
在第二种情况下,“Buff”上不会出现任何内容
- Buff 是一个
float
。
在第二种情况下我做错了什么?
最佳答案
2个问题:
Buff = *(float*)&aux;
尝试使用 4int
数组的地址作为指向 float 的指针。aux[]
可能有 16 个字节长,IEEE 754 单精度二进制float
预计为 4 个字节。两个 Actor :
(uint32_t*)
和(float*)
调用未定义的行为以及对齐和抗锯齿问题。最好使用union
.int main(void) { union { float f; unsigned char uc[sizeof(float)]; } x; // float to bytes x.f = 1.23f; printf("%x %x %x %x\n", x.uc[0], x.uc[1], x.uc[2], x.uc[3]); // bytes to float x.uc[0] = 0xA4; x.uc[1] = 0x70; x.uc[2] = 0x9D; x.uc[3] = 0x3F; printf("%.8e\n", x.f); }
输出
a4 70 9d 3f
1.23000002e+00
关于c - 将字节重新解释为 C 中的 float (IEEE 754 单精度二进制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48068467/