C# CRC-CCITT (Kermit)校验方法
using System; public enum Crc16Mode : ushort { Standard = 0xA001, CcittKermit = 0x8408 } public class Crc16 { static ushort[] table = new ushort[256]; public ushort ComputeChecksum( params byte[] bytes ) { ushort crc = 0; for(int i = 0; i < bytes.Length; ++i) { byte index = (byte)(crc ^ bytes[i]); crc = (ushort)((crc >> 8) ^ table[index]); } return crc; } public byte[] ComputeChecksumBytes( params byte[] bytes ) { ushort crc = ComputeChecksum( bytes ); return BitConverter.GetBytes( crc ); } public Crc16( Crc16Mode mode ) { ushort polynomial = (ushort)mode; ushort value; ushort temp; for(ushort i = 0; i < table.Length; ++i) { value = 0; temp = i; for(byte j = 0; j < 8; ++j) { if(((value ^ temp) & 0x0001) != 0) { value = (ushort)((value >> 1) ^ polynomial); }else { value >>= 1; } temp >>= 1; } table[i] = value; } } }