C#实现CRC校验

        /*
         * 1.预置CRC寄存器 0xFFFF
         * 2.待校验信息的第一个字节与16位CRC寄存器低8位异或,高8位不变,结果存于CRC寄存器
         * 3.CRC寄存器右移1位,用0填补最高位,检测右移的移出位
         * 4.移出位为0,重复第三步,移出位为1,CRC寄存器与0xA001异或
         * 5.重复3-4步,直到右移8次,对8位数据全部进行处理
         * 6.重复2-5步,进行待处理数据的下一字节处理
         * 7.计算完所有字节信息后,得到16位CRC寄存器值,交换高低字节即得到CRC校验码
         */
        /// 
        /// CRC校验
        /// 
        /// 校验数据 例如:01 06 01 18 00 01
        /// 高低8位
        public static byte[] CrcCheck(byte[] data)
        {
            byte[] Crc = new byte[2];
            //计算CRC校验码
            int CrcCode = 0xFFFF;
            int len = data.Length;
            for (int n = 0; n < data.Length; n++)
            {
                byte i;
                CrcCode = CrcCode ^ data[n];
                for (i = 0; i < 8; i++)
                {
                    int moveBit;
                    moveBit = CrcCode & 1;
                    CrcCode = CrcCode >> 1;
                    CrcCode = CrcCode & 0x7FFF;
                    if (moveBit == 1)
                        CrcCode = CrcCode ^ 0xA001;
                    CrcCode = CrcCode & 0xFFFF;
                }
            }
            //低位在前,高位在后
            Crc[1] = (byte)((CrcCode >> 8) & 0xFF);
            Crc[0] = (byte)(CrcCode & 0xFF);
            return Crc;
        }

你可能感兴趣的:(工控上位机C#,c#,开发语言)