我通过 UART 从 ST MCU 获取数据并将值显示到 PC 屏幕,但其结果与我对浮点类型的预期不同。
我正在使用 TrueStudio for ST MCU 和 C# 在屏幕上显示值。我在 MCU 上使用浮点值并将数据发送到 PC 当我进入 PC 时,如果我向 textBox 显示浮点值,它的结果与我的预期相差太大。在 TrueStudio 内存视图和观察视图中,我可以看到下面
在 TrueStudio MCU 中,我可以看到
- 在观察窗口中:acc.x = 5.12400007
- 在内存视图中:浮点格式的 5.124000E0 十六进制格式的 CFF7A340
我可以通过 C# 中的 Visual Studio 在 PC 中获取这些数据
我可以通过观察窗口看到 byte[] 数组数据,我可以看到我得到了
msg[4] = 0xCF, msg[5] = 0xF7, msg[6] = 0xA3, msg[7] = 0x40
- 所以在 12 月,3489112896
我用这些转换了这个值,但我无法得到我想要的,5.124
str = "3489112896" Convert.ToDouble(str) = 2246812992
将 dec 转换为 UInt32 所以
u32 = Convert.ToDouble(str) u32 = 0xcff7a340 (double)u32 = 3489112896 (float)u32 = 3.48911283E+09 BitConverter.ToSingle(BitConverter.GetBytes((int)u32), 0) = -2.21599971E-35
在 TrueStudio 中,复制如下(在 C 中)
memcpy(ðBuf[len], &g_Bsp.acc, sizeof(ACC_ST)); len += sizeof(ACC_ST);
在视觉工作室中,C#
UInt32 u32 = (UInt32)( msg[4] | (msg[5] << 8) | (msg[6] << 16) | (msg[7]<<24)); LOG("u32 : " + u32 + "\n");
我首先尝试使用 MSB/LSB,但无法得到我想要的。如何在 C# 中获得 5.123 浮点值?