Python 浮点到嵌入式c浮点通过UART
我试图通过UART将Pythonfloat发送到一个嵌入式c处理器,NXP的MKE14。在python中,我使用Struct库生成一个32位浮点并通过UART发送。我检查了两个浮子推进,都是“IEEE-754” 我发送十进制:5.490715十六进制:0x40,0xAF,0xB3,0xF0 我接收的是“经度”十进制:1085256688十六进制:0x40、0xAF、0xB3、0xF0 浮点转换小数后:1085256704十六进制:0x40、0xAF、0xB4、0x00 这一定是一些转换问题,我收到了正确的数据包,但表示是完全不同的 两个系统上使用的代码都在附件中Python 浮点到嵌入式c浮点通过UART,python,c,struct,floating-point,ieee-754,Python,C,Struct,Floating Point,Ieee 754,我试图通过UART将Pythonfloat发送到一个嵌入式c处理器,NXP的MKE14。在python中,我使用Struct库生成一个32位浮点并通过UART发送。我检查了两个浮子推进,都是“IEEE-754” 我发送十进制:5.490715十六进制:0x40,0xAF,0xB3,0xF0 我接收的是“经度”十进制:1085256688十六进制:0x40、0xAF、0xB3、0xF0 浮点转换小数后:1085256704十六进制:0x40、0xAF、0xB4、0x00 这一定是一些转换问题,我收
不能通过强制转换将整数位模式转换为
浮点值。它只是将整数转换为最接近的浮点数,不会将位重新解释为浮点值。如果它像你想的那样工作,那么:
const float x = 512;
将x
设置为7.175E-43
,这将非常不方便
最好的方法可能是复制位,所以替换
SUS_Data.Longitude = ((float)Longitude);
作者:
获取指针并将其类型转换为浮点指针:
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);
请不要截图。只要复制粘贴它!第一个建议:取两个参考号(2.0;3.14159;1000000)并检查其两侧的十六进制表示。我的意思是:独立于传输线。在许多情况下,有一个简单的endian问题,你所要做的就是恢复字节(或位)顺序。是的,很可能是endian问题。
SUS_Data.Longitude = *((float *) &Longitude);