将字节数组强制转换为浮点

Cast byte array to float

本文关键字:转换 字节 字节数 数组      更新时间:2023-10-16

我有一个程序,需要接收4个字节并将它们转换为IEEE-754浮点。字节被乱传,但我可以把它们按顺序放回去。我的问题是把它们扔到浮子上。代码的相关部分:

//Union to store bytes and float on top of each other
typedef union {
    unsigned char b[4];
    float f;
} bfloat;
//Create instance of the union
bfloat Temperature;
//Add float data using transmitted bytes
MMI.Temperature.b[2] = 0xD1;//MMIResponseMsg[7];
MMI.Temperature.b[3] = 0xE1;//MMIResponseMsg[8];
MMI.Temperature.b[0] = 0x41;//MMIResponseMsg[9];
MMI.Temperature.b[1] = 0xD7;//MMIResponseMsg[10];
//Attempting to read the float value
lWhole=(long) ((float)MMI.Temperature.f);
//DEBUGGING
stevenFloat = (float)MMI.Temperature.f;

CCD_ 1是长的,而CCD_。调试时,我可以看到我分配给字节数组的值存储正确,但stevenFloatlWhole的值不正确。它们似乎徘徊在0附近,或接近最大浮动/长值。在我的编译器中,long和float都是32位。

有人知道为什么不起作用吗?当我收到要处理的代码时,它在我看来是正确的,而且它似乎是一个常见的在线解决方案,我只是被难住了。

事实上,这是一个endianness问题:

#include <stdio.h>
#include <stdint.h>
int main()
{
    union {
        uint8_t bytes[4];
        float f;
    } fun1 = { .bytes = { 0x41, 0xd7, 0xd1, 0xe1} }, fun2 = { .bytes = { 0xe1, 0xd1, 0xd7, 0x41} };
    printf("%fn%fn", fun1.f, fun2.f);
    return 0;
}

此打印:

-483860023749617123328.000000
26.977480