C#如何将modbus中的单精度浮点数解析为十进制,并以字符串显示出来

一般modbus中的数据是四个16进制数,我们可以通过一些工具来直接转换成十进制读取,但是如果自己写程序应该怎么做呢,我是这么做的,在此记录帮助大家少走弯路。

我们用C#举例,将下面这串modbus解析一下:

 byte[] b = {
    
    0x34, 0x03, 0x04, 0x42, 0xB6, 0xBC, 0x45, 0xDB, 0x9D};
 //这里的顺序要注意:字节在内存中的排列顺序,intel的cpu按little endian顺序(低字节在前),motorola的cpu按big endian顺序(高字节在前)排列。
 string str1 = b[6].ToString("X2") + "" + b[5].ToString("X2") + "" + b[4].ToString("X2") + "" + b[3].ToString("X2");
 //此时str1="45BCB642"
            
 float f = stringToFloat(str1);
 string data = f.ToString("f4");

转换方法:

private float stringToFloat(string str)
{
    
    
	MatchCollection matches = Regex.Matches(str, @"[0-9A-Fa-f]{2}");
	byte[] bytes = new byte[matches.Count];
	for (int i = 0; i < bytes.Length; i++)
	bytes[i] = byte.Parse(matches[i].Value, NumberStyles.AllowHexSpecifier);
	float m = BitConverter.ToSingle(bytes, 0);
	return m;
}

这样就得到单精度浮点数的字符串了。

想知道转换原理,看这篇单精度浮点数转十进制就可以。

猜你喜欢

转载自blog.csdn.net/qq_35761934/article/details/124582833
今日推荐