在C中将字节重新解释为float(IEEE 754单精度二进制)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C中将字节重新解释为float(IEEE 754单精度二进制)相关的知识,希望对你有一定的参考价值。

我想在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。
  • to []是int [4]。

要将字节重新解释为float,我正在尝试:

Buff = *(float*)&aux;

在第二种情况下,“Buff”上没有任何内容

  • Buff是float

在第二种情况下,我做错了什么?

答案

2个问题:

  1. Buff = *(float*)&aux;尝试使用4个int数组的地址作为浮点数的指针。 aux[]可能长16个字节,IEEE 754单精度二进制float预计为4个字节。
  2. 两个演员阵容:(uint32_t*)(float*)调用未定义的行为以及对齐和消除锯齿问题。最好使用unionint main(void) { union { float f; unsigned char uc[sizeof(float)]; } x; // float to bytes x.f = 1.23f; printf("%x %x %x %x ", 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 ", x.f); }

产量

a4 70 9d 3f
1.23000002e+00

以上是关于在C中将字节重新解释为float(IEEE 754单精度二进制)的主要内容,如果未能解决你的问题,请参考以下文章

IEEE754——4字节实数与十六进制的转换

浮动到双倍(IEEE754)转换

如何理解IEEE 754标准对Java中float值和double值的规定

IEEE754表示浮点数

Java中浮点类型的精度问题 double float

float数据和IEEE754标准