c# crc16校验之查短表法


话不多说,上代码开撸

        static readonly UInt16[] crcTlb = new UInt16[16]{0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401,
  0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400};
        public static UInt16 CalcCRC16(byte[] pBuf)
        {
            byte i = 0, ch = 0;
            UInt16 crc = 0xFFFF;
            for (i = 0; i < pBuf.Length; i++)
            {
                ch = pBuf[i];
                crc = (UInt16)(crcTlb[(ch ^ crc) & 0x0F] ^ (crc >> 4));
                crc = (UInt16)(crcTlb[((ch >> 4) ^ crc) & 0x0F] ^ (crc >> 4));
            }
            crc = (UInt16)((crc & 0xFF) << 8 | (crc >> 8));
            return crc;
        }

  

posted @ 2022-02-12 14:39  高山~流水  阅读(588)  评论(0)    收藏  举报