C# 如何使用C将十六进制转换为浮点#
我通过UART从ST MCU获取数据,并将值显示到PC屏幕,但其结果与我在浮点型中预期的结果不同 我正在使用TrueTudio for ST MCU和C#在屏幕上显示值。 我在MCU中使用浮点值并将数据发送到PC 当我进入PC机时,若我向文本框显示浮点值,其结果与我预期的结果相差太大。 在TrueStudioMemory视图和watch视图中,我可以看到下面的内容C# 如何使用C将十六进制转换为浮点#,c#,ieee-754,truestudio,C#,Ieee 754,Truestudio,我通过UART从ST MCU获取数据,并将值显示到PC屏幕,但其结果与我在浮点型中预期的结果不同 我正在使用TrueTudio for ST MCU和C#在屏幕上显示值。 我在MCU中使用浮点值并将数据发送到PC 当我进入PC机时,若我向文本框显示浮点值,其结果与我预期的结果相差太大。 在TrueStudioMemory视图和watch视图中,我可以看到下面的内容 在TrueStudio MCU中,我可以看到 手表窗口内:acc.x=5.12400007 内存视图:浮点格式的5.124000E
- 手表窗口内:acc.x=5.12400007
- 内存视图:浮点格式的5.124000E0 十六进制格式的CFF7A340
- 我可以通过观察窗口看到byte[]数组数据,我可以看到
msg[4] = 0xCF, msg[5] = 0xF7, msg[6] = 0xA3, msg[7] = 0x40
- 所以在12月,3489112896
- 我用这些转换了这个值,但是我无法得到我想要的,5.124
将dec转换为UInt32 sostr = "3489112896" Convert.ToDouble(str) = 2246812992
u32 = Convert.ToDouble(str) u32 = 0xcff7a340 (double)u32 = 3489112896 (float)u32 = 3.48911283E+09 BitConverter.ToSingle(BitConverter.GetBytes((int)u32), 0) = -2.21599971E-35
UInt32 u32=(UInt32)(msg[4]|(msg[5])您可以使用和转换为十六进制:
您可以通过将数据转换回字节
数组,然后使用以下方法从十六进制转换回:
公共静态浮点HexToFloat(字符串hexVal)
{
字节[]数据=新字节[hexVal.Length/2];
对于(int i=0;i
根据要与之交换数据的系统的不同,您可能必须考虑endianness并相应地反转字节顺序。您可以使用检查endianness
memcpy(ðBuf[len], &g_Bsp.acc, sizeof(ACC_ST));
len += sizeof(ACC_ST);
UInt32 u32 = (UInt32)( msg[4] | (msg[5] << 8) | (msg[6] << 16) | (msg[7]<<24));
LOG("u32 : " + u32 + "\n");
public static string FloatToHex(float val)
{
var bytes = BitConverter.GetBytes(val);
return BitConverter.ToString(bytes).Replace("-", string.Empty);
}
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);
}