CRC 16位(多项式0x1021)CCITT计算,初始值为0x0000

时间:2016-10-10 15:24:14

标签: c# crc16

好吧,我正在挠头,非常接近用锤子打破它。我试图计算CRC16位CCITT,它没有给我它应该的东西。我搜索了几乎所有东西,不知道我错过了什么。

这是CRC计算的最后两个字节的完整数据包

  

54 A1 4A 03 E7 03 D4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 CA

现在我正在添加同步字节,即0x54,如果我不添加同步字节,数据包将是

  

54 A1 4A 03 E7 03 D4 00 00 00 00 00 00 00 00 00 00 00 00今日00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 65 CF

两个CRC值(64 CA&& 65 CF)都是错误的。我应该得到72 DC&&分别为99 3F。

这是我用来计算CRC16位的代码

private static ushort CRCCalc(byte[] data)
    {
        ushort wCRC = 0;
        for (int i = 1; i < data.Length; i++)
        {
            wCRC = (ushort)(wCRC ^ (data[i] << 8));

            for (int j = 0; j < 8; j++)
            {
                if ((wCRC & 0x8000) != 0)
                    wCRC = (ushort)((wCRC << 1) ^ 0x1021);
                else
                    wCRC <<= 1;
            }
        }
        return wCRC;
    }

任何评论......?

由于

0 个答案:

没有答案