16进制转float_SYC_MORE的博客-CSDN博客_16进制转float

系统环境:Win10+VS2017+C#

使用C#编写上位机程序提出的需求:需要将串口采集到的16进制数据转换成float类型数据(保留数据精度)。

string data_Hex = “42001307”;
uint  data_uint = uint.Parse(data_Hex, System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] data_byte = BitConverter.GetBytes(data_uint);
float data_float = BitConverter.ToSingle(data_byte, 0);

上述代码将16进制字符串转换为float类型数据,代码转换后的值为32.01858139038086。

上面使用的是大端模式16进制数据根据IEEE 754规则进行转换得到的数据。

当替换成自己的16进制数据转换后发现数据值和使用进制转换器转换的数据值不相同的时候,需要考虑串口通讯过程中是否存在大小端问题。

Big-Endian: 低地址存放高位,如下:
高地址
  ---------------
  buf[3] (0x42) – 低位
  buf[2] (0x00)
  buf[1] (0x13)
  buf[0] (0x07) – 高位
  ---------------
  低地址
  
42001307转换后的数据为:32.01858139038086
  
Little-Endian: 低地址存放低位,如下:
高地址
  ---------------
  buf[3] (0x07) – 高位
  buf[2] (0x13)
  buf[1] (0x00)
  buf[0] (0x42) – 低位
  --------------
低地址

07130042转换后的数据位:1.1059126616820411e-34

需要判断传感器采集回来的数据属于哪一类,如果计算出来的值和数据转换器转换出来的值不对的话,大小端转换一下再测试一下。


原网址: 访问
创建于: 2022-12-15 15:04:23
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论