我在主机和嵌入式处理器之间进行串行通信。在嵌入式方面,我需要解析浮点和整数数据的字符串。我目前正在做的事情是这样的:
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;
}
其中 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