using System; using System.Linq; using NModbus.Utility; namespace NModbus.Extensions { public static class CrcExtensions { /// /// Determines whether the crc stored in the message matches the calculated crc. /// /// /// public static bool DoesCrcMatch(this byte[] message) { var messageFrame = message.Take(message.Length - 2).ToArray(); //Calculate the CRC with the given set of bytes var calculatedCrc = BitConverter.ToUInt16(ModbusUtility.CalculateCrc(messageFrame), 0); //Get the crc that is stored in the message var messageCrc = message.GetCRC(); //Determine if they match return calculatedCrc == messageCrc; } /// /// Gets the CRC of the message /// /// /// public static ushort GetCRC(this byte[] message) { if (message == null) throw new ArgumentNullException(nameof(message)); if (message.Length < 4) throw new ArgumentException("message must be at least four bytes long"); return BitConverter.ToUInt16(message, message.Length - 2); } } }