Python 浮点到嵌入式c浮点通过UART

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 这一定是一些转换问题,我收

我试图通过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);