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
你需要施放指针.转换值只是将int转换为float.尝试:
*dest = *((float32*)&temp);
Run Code Online (Sandbox Code Playgroud)