我试图通过UART将python float的数据发送到嵌入式c处理器,即NXP的MKE14。在python中,我使用Struct库使32位浮点数并通过UART发送。我检查了两个浮点实现,并且都检查了“ IEEE-754”。
我发送十进制:5.490715十六进制:0x40、0xAF,0xB3、0xF0
我收到的是“经度”十进制:1085256688十六进制:0x40、0xAF,0xB3、0xF0
float conv十进制后:1085256704十六进制:0x40、0xAF,0xB4、0x00
一定是一些转换问题,我收到了正确的数据包,但表示方式却完全不同。
两个系统上使用的代码在附件中。
答案 0 :(得分:2)
获取指针并将其类型转换为浮点指针:
uint32 tmp = 1085256688;
float f;
f = *((float *) &tmp); // 5.490715
或使用联合:
union test {
uint32_t u;
float f;
};
union test tmp;
tmp.u = 1085256688; // tmp.f == 5.490715
在您的情况下:
SUS_Data.Longitude = *((float *) &Longitude);
答案 1 :(得分:0)
您不能通过强制转换将整数位模式转换为float
。只是将整数转换为最接近的浮点数,它不会不将位重新解释为float
。如果它像您想的那样工作,那么:
const float x = 512;
将x
设置为7.175E-43
,这不是很方便。
最好的方法可能就是复制位,所以替换
SUS_Data.Longitude = ((float)Longitude);
作者:
memcpy(&SUS_Data.Longitude, &Longitude, sizeof SUS_Data.Longitude);