我是从ST单片机通过UART获得数据和显示值到PC屏幕,但其结果与我所期望的浮动类型不同。
我使用TrueStudio为ST单片机和C#显示在屏幕上的值。我在单片机上使用浮点值,当我进入PC机时将数据发送到PC机,如果我将浮点数显示给textBox,其结果与我所期望的相差太大了。在TrueStudio内存视图和监视视图中,我可以看到以下内容
- in watch window : acc.x = 5.12400007
- in memory view : 5.124000E0 in floating point format CFF7A340 in hex format
- I can see byte[] array data via watch window and I can see I gotmsg4 = 0xCF,msg5 = 0xF7,msg6 = 0xA3,msg7 = 0x40
-所以在12月份,3489112896
-我用这些来转换这个价值,但我没有得到我想要的,5.124
str = "3489112896“Convert.ToDouble(str) = 2246812992
将dec转换为UInt32所以
BitConverter.ToSingle(BitConverter.GetBytes((int)u32),u32 = Convert.ToDouble(str) u32 = 0xcff7a340 (双)u32= 3489112896 (浮子)u32= 3.48911283E+09 0) = -2.21599971E-35
在TrueStudio中,复制如下(在C中)
memcpy(Buflen,&g_Bsp.acc,sizeof(ACC_ST));len += sizeof(ACC_ST);
在视听演播室,C#
UInt32 u32 = (UInt32) ( msg5 << 8) x (msg6 << 16) x(msg7<<24);日志( u32:+u32+ "\n");
我已经尝试了MSB/LSB,但没有得到我想要的。如何在C#中获得5.123浮动值?
发布于 2019-05-30 01:51:37
您可以使用BitConverter.GetBytes和BitConverter.ToString转换为十六进制。
public static string FloatToHex(float val)
{
var bytes = BitConverter.GetBytes(val);
return BitConverter.ToString(bytes).Replace("-", string.Empty);
}通过将数据转换回byte数组,然后使用BitConverter.ToSingle,您可以从十六进制转换回来。
public static float HexToFloat(string hexVal)
{
byte[] data = new byte[hexVal.Length / 2];
for (int i = 0; i < data.Length; ++i)
{
data[i] = Convert.ToByte(hexVal.Substring(i * 2, 2), 16);
}
return BitConverter.ToSingle(data, 0);
}根据您想要与之交换数据的系统,您可能必须考虑到endianness,并相应地反转字节的顺序。您可以使用BitConverter.IsLittleEndian检查endianness。
https://stackoverflow.com/questions/56370436
复制相似问题