C# 带多项式参数的 CRC16计算

网上很多CRC16计算方式,特别是C#的,包括我以前写的查表法计算的出来的都是比较常见的计算方式。

以下是 带多项式参数的 CRC16计算函数 例如: Poly=0x8408 

转载请注明出处:一叶知秋(www.yyzq.net)(QQ:275623749)

 /// <summary>
        /// 多项式参数 CRC16计算
        /// </summary>
        /// <param name="Cmd">命令</param>
        /// <param name="Poly">多项式</param>
        /// <returns></returns>
        public byte[] GetCRC16ByPoly(byte[] Cmd, ushort Poly)
        {
            byte[] CRC = new byte[2];
            ushort CRCValue = 0xFFFF;
            for (int i = 0; i < Cmd.Length; i++)
            {
                CRCValue = (ushort)(CRCValue ^ Cmd[i]);
                for (int j = 0; j < 8; j++)
                {
                    if ((CRCValue & 0x0001) != 0)
                    {
                        CRCValue = (ushort)((CRCValue >> 1) ^ Poly);
                    }
                    else
                    {
                        CRCValue = (ushort)(CRCValue >> 1);
                    }
                }
            }
            return BitConverter.GetBytes(CRCValue);
        }


你可能感兴趣的:(C# 带多项式参数的 CRC16计算)