Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字节重新解释为C中的浮点(IEEE 754单精度二进制)_C_Floating Point_Byte_Code Composer_Single Precision - Fatal编程技术网

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

将字节重新解释为C中的浮点(IEEE 754单精度二进制),c,floating-point,byte,code-composer,single-precision,C,Floating Point,Byte,Code Composer,Single Precision,我想把4字节重新解释为C语言中的IEEE 754单精度二进制 为了获得表示浮动的字节,我使用了: 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 au

我想把4字节重新解释为C语言中的IEEE 754单精度二进制

为了获得表示浮动的字节,我使用了:

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是一个
    浮点
第二种情况下我做错了什么?

2个问题:

  • Buff=*(float*)&aux
    尝试使用4
    int
    数组的地址作为指向浮点的指针
    aux[]
    可能有16个字节长,IEEE 754单精度二进制
    浮点
    预计有4个字节

  • 这两种类型转换:
    (uint32_t*)
    (float*)
    调用未定义的行为以及对齐和抗锯齿问题。最好使用
    接头

    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
    

    您尚未反转原始(可疑)转换。Hmmm
    aux[]
    is
    int[4]
    和code正在使用它来将字节转换为浮点值,这是吗?
    aux
    应该是一个
    字符[4]
    uint8\u t[4]
    这两种转换都不是有用的——我怀疑你脑子里确实有一些有意义的转换,但我无法从这个问题中解读它。那么你到底想做什么呢?我使用的是一个不允许使用printf功能的微控制器,你可以用另一种方式来进行转换(字节到浮点)?@Guilherme,即使没有
    printf(“%.8e\n”,x.f)
    ,转换后的
    浮点值
    位于
    x.f
    中<代码>printf(“%.8e\n”,x.f”)仅用于显示目的。