Как С# анализирует число с плавающей запятой одинарной точности в modbus в десятичное число и отображает его в виде строки

Как правило, данные в modbus представляют собой четыре шестнадцатеричных числа, мы можем использовать некоторые инструменты, чтобы напрямую преобразовать их в десятичное чтение, но что мне делать, если я пишу программу сам, я сделал это так, и я запишу это здесь, чтобы помочь вам избежать обходных путей.

Давайте используем 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;
}

Таким образом получается строка чисел одинарной точности с плавающей запятой.

Если вы хотите узнать принцип преобразования, просто прочитайте эту статью, чтобы преобразовать числа с плавающей запятой одинарной точности в десятичные .

Guess you like

Origin blog.csdn.net/qq_35761934/article/details/124582833