using System; namespace S7.Net.Types { /// /// Contains the conversion methods to convert Counter from S7 plc to C# ushort (UInt16). /// public static class Counter { /// /// Converts a Counter (2 bytes) to ushort (UInt16) /// public static UInt16 FromByteArray(byte[] bytes) { if (bytes.Length != 2) { throw new ArgumentException("Wrong number of bytes. Bytes array must contain 2 bytes."); } // bytes[0] -> HighByte // bytes[1] -> LowByte return (UInt16)((bytes[0] << 8) | bytes[1]); } /// /// Converts a ushort (UInt16) to word (2 bytes) /// public static byte[] ToByteArray(UInt16 value) { byte[] bytes = new byte[2]; bytes[0] = (byte)((value << 8) & 0xFF); bytes[1] = (byte)((value) & 0xFF); return bytes; } /// /// Converts an array of ushort (UInt16) to an array of bytes /// public static byte[] ToByteArray(UInt16[] value) { ByteArray arr = new ByteArray(); foreach (UInt16 val in value) arr.Add(ToByteArray(val)); return arr.Array; } /// /// Converts an array of bytes to an array of ushort /// public static UInt16[] ToArray(byte[] bytes) { UInt16[] values = new UInt16[bytes.Length / 2]; int counter = 0; for (int cnt = 0; cnt < bytes.Length / 2; cnt++) values[cnt] = FromByteArray(new byte[] { bytes[counter++], bytes[counter++] }); return values; } } }