C# CRC - 16
using System; static class Program { static void Main() { string input = "8000"; var bytes = HexToBytes(input); string hex = Crc16.ComputeChecksum(bytes).ToString("x2"); Console.WriteLine(hex); //c061 } static byte[] HexToBytes(string input) { byte[] result = new byte[input.Length / 2]; for(int i = 0; i < result.Length; i++) { result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); } return result; } public static class Crc16 { const ushort polynomial = 0xA001; static readonly ushort[] table = new ushort[256]; public static ushort ComputeChecksum(byte[] bytes) { ushort crc = 0; for (int i = 0; i < bytes.Length; ++i) { byte index = (byte)(crc ^ bytes[i]); crc = (ushort)((crc