通过UART浮动到嵌入式c浮动

时间:2018-07-04 13:50:08

标签: python c struct floating-point ieee-754

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

一定是一些转换问题,我收到了正确的数据包,但表示方式却完全不同。

两个系统上使用的代码在附件中。

Python code image

Embedded C code

2 个答案:

答案 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);