浮动到嵌入式 c 浮动在 UART 上
float to embedded c float over UART
我正在尝试通过 UART 将 python 浮点数发送到嵌入式 c 处理器,即来自 NXP 的 MKE14。在 python 中,我正在使用 Struct 库制作一个 32 位浮点数并通过 UART 发送它。我检查了两个 float implementations 和 "IEEE-754".
我发送十进制:5.490715 十六进制:0x40、0xAF、0xB3、0xF0
我收到 "Longitude" 十进制:1085256688 十六进制:0x40、0xAF、0xB3、0xF0
浮动转换后十进制:1085256704 十六进制:0x40、0xAF、0xB4、0x00
一定是转换问题,我收到了正确的数据包,但表示完全不同。
两个系统上使用的代码在附件中。
Python code image
Embedded C code
您不能通过强制转换将整数位模式转换为 float
。这只是将整数转换为最接近的浮点数,它 而不是 将这些位重新解释为 float
。如果它像你想的那样工作,这:
const float x = 512;
会把x
设置成7.175E-43
,不太方便。
最好的方法可能是只复制位,所以替换
SUS_Data.Longitude = ((float)Longitude);
作者:
memcpy(&SUS_Data.Longitude, &Longitude, sizeof SUS_Data.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);
我正在尝试通过 UART 将 python 浮点数发送到嵌入式 c 处理器,即来自 NXP 的 MKE14。在 python 中,我正在使用 Struct 库制作一个 32 位浮点数并通过 UART 发送它。我检查了两个 float implementations 和 "IEEE-754".
我发送十进制:5.490715 十六进制:0x40、0xAF、0xB3、0xF0
我收到 "Longitude" 十进制:1085256688 十六进制:0x40、0xAF、0xB3、0xF0
浮动转换后十进制:1085256704 十六进制:0x40、0xAF、0xB4、0x00
一定是转换问题,我收到了正确的数据包,但表示完全不同。
两个系统上使用的代码在附件中。
Python code image
Embedded C code
您不能通过强制转换将整数位模式转换为 float
。这只是将整数转换为最接近的浮点数,它 而不是 将这些位重新解释为 float
。如果它像你想的那样工作,这:
const float x = 512;
会把x
设置成7.175E-43
,不太方便。
最好的方法可能是只复制位,所以替换
SUS_Data.Longitude = ((float)Longitude);
作者:
memcpy(&SUS_Data.Longitude, &Longitude, sizeof SUS_Data.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);