private static void TestCRC16(CRC16Type type, params IEnumerable <byte>[] testValues) { foreach (var testValue in testValues) { Console.WriteLine("------------------------------------------------------------------"); Console.WriteLine($"CRC16 [{type}] test for source [{testValue.ToHexString()}]"); Console.WriteLine($"crc is 0x{testValue.CRC16(type).ToString("x4")}"); Console.WriteLine($"source + crc is 0x{testValue.WithCRC16(type).ToHexString()}"); Console.WriteLine("------------------------------------------------------------------"); } }
/*******************************************/ /// <summary> /// This function returns the byte array included crc16 value. /// </summary> /// <param name="data"></param> /// <param name="type">This parameter means crc16 algorithm type.</param> /// <returns></returns> /*******************************************/ public static IEnumerable <byte> WithCRC16(this IEnumerable <byte> data, CRC16Type type = CRC16Type.Basic) { if (type == CRC16Type.Basic) { return(data.AppendRange(BitConverter.GetBytes(CRC.ComputeCRC16(data)))); } else if (type == CRC16Type.CCITTxModem) { return(data.AppendRange(BitConverter.GetBytes(CRC.ComputeCCITTxModem(data)))); } else if (type == CRC16Type.DNP) { return(data.AppendRange(BitConverter.GetBytes(CRC.ComputeDNP(data)))); } return(new List <byte>()); }
/*******************************************/ /// <summary> /// This function returns the CRC16 value. /// </summary> /// <param name="data"></param> /// <param name="type">This parameter means crc16 algorithm type.</param> /// <returns></returns> /*******************************************/ public static ushort CRC16(this IEnumerable <byte> data, CRC16Type type = CRC16Type.Basic) { ushort result = 0; if (type == CRC16Type.Basic) { result = CRC.ComputeCRC16(data); } else if (type == CRC16Type.CCITTxModem) { result = CRC.ComputeCCITTxModem(data); } else if (type == CRC16Type.DNP) { result = CRC.ComputeDNP(data); } return(result); }