我想在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;
要将字节重新解释为float
,我正在尝试:
Buff = *(float*)&aux;
在第二种情况下,没有任何关于“Buff”的内容
float
。在第二种情况下,我做错了什么?
答案 0 :(得分:3)
2个问题:
Buff = *(float*)&aux;
尝试使用4 int
数组的地址作为浮点数的指针。 aux[]
长度可能为16个字节, IEEE 754单精度二进制 float
预计为4个字节。
两个演员:(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