Как правило, данные в 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;
}
Таким образом получается строка чисел одинарной точности с плавающей запятой.
Если вы хотите узнать принцип преобразования, просто прочитайте эту статью, чтобы преобразовать числа с плавающей запятой одинарной точности в десятичные .