在c中输入coercion:unsigned int to float

Tre*_*rey 0 c floating-point integer coercion

我在主机和嵌入式处理器之间进行串行通信.在嵌入式方面,我需要解析浮点和整数数据的字符串.我目前正在做的是这样的事情:

inline float32* fp_unpack(float32* dest, volatile char* str) {
    Uint32 temp = (Uint32)str[3]<<24;
    temp |= (Uint32)str[2]<<16;
    temp |= (Uint32)str[1]<<8;
    temp |= (Uint32)str[0];
    temp = (float32)temp;
    *dest = (float32)temp;

    return dest;
}
Run Code Online (Sandbox Code Playgroud)

str有四个字符,每个字符代表一个浮点字节.字符串中的字节是有序的小端.

举个例子,我试图从str中提取数字100.0.我已经验证了字符串的内容是:

s [0]:0x00,s [1]:0x00,s [2]:0x20,s [3]:0x41,

这是100.0的32位浮点表示.此外,我已经验证该函数成功将temp设置为0x41200000.但是,dest最终为0x4e824000.我知道问题来自于:*dest =(float32)temp,我希望它只是简单地将位从temp复制到dest,并使用类型转换使编译器满意.

但是,我已经意识到情况并非如此,因为操作:float x =(float)4/3实际上将4转换为4.0,即更改位.

如何将temp中的位强制转换为dest?

提前致谢

编辑:注意0x4120000作为整数是1092616192,作为一个浮点数,是0x4e82400

and*_*ski 5

你需要施放指针.转换值只是将int转换为float.尝试:

*dest = *((float32*)&temp);
Run Code Online (Sandbox Code Playgroud)

  • 这会调用未定义的行为,并导致现代编译器生成错误的代码! (2认同)