From c6b5d9b928d307607c809b05858e71c70410887d Mon Sep 17 00:00:00 2001 From: luosheng Date: Tue, 12 Dec 2023 09:05:57 +0800 Subject: [PATCH] 3412 Alter --- .../Modbus.Net.BigEndian3412ValueHelper.cs | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/Modbus.Net/Modbus.Net.BigEndian3412/Modbus.Net.BigEndian3412ValueHelper.cs b/Modbus.Net/Modbus.Net.BigEndian3412/Modbus.Net.BigEndian3412ValueHelper.cs index c826d6e..8c652ef 100644 --- a/Modbus.Net/Modbus.Net.BigEndian3412/Modbus.Net.BigEndian3412ValueHelper.cs +++ b/Modbus.Net/Modbus.Net.BigEndian3412/Modbus.Net.BigEndian3412ValueHelper.cs @@ -5,6 +5,8 @@ namespace Modbus.Net public partial class Endian { public const int BigEndian3412 = 10; + + public const int LittleEndian3412 = 11; } public class BigEndian3412ValueHelper : BigEndianLsbValueHelper @@ -36,6 +38,196 @@ namespace Modbus.Net public new static BigEndian3412ValueHelper Instance => _bigEndian3412Instance ?? (_bigEndian3412Instance = new BigEndian3412ValueHelper()); + public override int GetInt(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 4); + byte temp; + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + var t = BitConverter.ToInt32(data, pos); + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + Array.Reverse(data, pos, 4); + pos += 4; + return t; + } + + public override uint GetUInt(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 4); + byte temp; + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + var t = BitConverter.ToUInt32(data, pos); + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + Array.Reverse(data, pos, 4); + pos += 4; + return t; + } + + public override long GetLong(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 8); + byte temp; + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + var t = BitConverter.ToInt64(data, pos); + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + Array.Reverse(data, pos, 8); + pos += 8; + return t; + } + + public override ulong GetULong(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 8); + byte temp; + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + var t = BitConverter.ToUInt64(data, pos); + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + Array.Reverse(data, pos, 8); + pos += 8; + return t; + } + + public override float GetFloat(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 4); + byte temp; + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + var t = BitConverter.ToSingle(data, pos); + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + Array.Reverse(data, pos, 4); + pos += 4; + return t; + } + + public override double GetDouble(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 8); + byte temp; + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + var t = BitConverter.ToDouble(data, pos); + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + Array.Reverse(data, pos, 8); + pos += 8; + return t; + } + } + + public class LittleEndian3412ValueHelper : LittleEndianLsbValueHelper + { + private static LittleEndian3412ValueHelper _littleEndian3412Instance; + + /// + /// 构造器 + /// + protected LittleEndian3412ValueHelper() + { + } + + /// + /// 覆写的实例获取 + /// + protected override ValueHelper _Instance => _littleEndian3412Instance; + + /// + /// 是否为大端 + /// + protected new bool LittleEndian => true; + + protected new bool LittleEndianBit => false; + + /// + /// 覆盖的获取实例的方法 + /// + public new static LittleEndian3412ValueHelper Instance + => _littleEndian3412Instance ?? (_littleEndian3412Instance = new LittleEndian3412ValueHelper()); + + public override int GetInt(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 4); + byte temp; + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + var t = BitConverter.ToInt32(data, pos); + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + Array.Reverse(data, pos, 4); + pos += 4; + return t; + } + + public override uint GetUInt(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 4); + byte temp; + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + var t = BitConverter.ToUInt32(data, pos); + temp = data[pos]; data[pos] = data[pos + 2]; data[pos + 2] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 3]; data[pos + 3] = temp; + Array.Reverse(data, pos, 4); + pos += 4; + return t; + } + + public override long GetLong(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 8); + byte temp; + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + var t = BitConverter.ToInt64(data, pos); + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + Array.Reverse(data, pos, 8); + pos += 8; + return t; + } + + public override ulong GetULong(byte[] data, ref int pos) + { + Array.Reverse(data, pos, 8); + byte temp; + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + var t = BitConverter.ToUInt64(data, pos); + temp = data[pos]; data[pos] = data[pos + 6]; data[pos + 6] = temp; + temp = data[pos + 1]; data[pos + 1] = data[pos + 7]; data[pos + 7] = temp; + temp = data[pos + 2]; data[pos + 2] = data[pos + 4]; data[pos + 4] = temp; + temp = data[pos + 3]; data[pos + 3] = data[pos + 5]; data[pos + 5] = temp; + Array.Reverse(data, pos, 8); + pos += 8; + return t; + } + public override float GetFloat(byte[] data, ref int pos) { Array.Reverse(data, pos, 4);