【问题标题】:CRC16 calculation not quite rightCRC16 计算不太正确
【发布时间】:2011-06-13 07:31:47
【问题描述】:

我在 http://www.ross.net/crc/download/crc_v3.txt 工作,并使用 16 位多项式 0x8005

我的消息是0xAE

此站点http://www.lammertbies.nl/comm/info/crc-calculation.html 根据我拥有的其他数据生成正确的计算。

这是我的代码的输出,描述了每个步骤。

Poly: 1010000000000001
Initial message: 01110101
Message: 011101010000000000000000 24
crcreg: 0000000000000000
crcreg: 0000000000000001
crcreg: 0000000000000011
crcreg: 0000000000000111
crcreg: 0000000000001110
crcreg: 0000000000011101
crcreg: 0000000000111010
crcreg: 0000000001110101
crcreg: 0000000011101010
crcreg: 0000000111010100
crcreg: 0000001110101000
crcreg: 0000011101010000
crcreg: 0000111010100000
crcreg: 0001110101000000
crcreg: 0011101010000000
crcreg: 0111010100000000
crcreg: 1110101000000000
crcreg: 1101010000000000  //Here we had a 1 pop off the shift reg, so we XOR in the poly.
^poly:  1010000000000001
=crcreg:0111010000000001

crcreg: 1110100000000010
crcreg: 1101000000000100
^poly:  1010000000000001
=crcreg:0111000000000101

crcreg: 1110000000001010
crcreg: 1100000000010100
^poly:  1010000000000001
=crcreg:0110000000010101

crcreg: 1100000000101010
crcreg: 1000000001010100
^poly:  1010000000000001
=crcreg:0010000001010101

CRC:    0010000001010101

4 aa
R-CRC:  1010101000000100   //Reversed, just in case MSB/LSB display got hosed.

55 20

预期的 CRC16 是 0xBC81

【问题讨论】:

    标签: algorithm crc crc16


    【解决方案1】:

    你的多项式是相反的:你需要用最左边的位来表示 x 的高次幂的系数。尝试反转多项式的位(将其表示为 1000000000000101),我认为您会得到正确的结果。

    您可能还需要反转输入和输出,具体取决于您使用的特定 CRC 实现的定义方式(LSB 优先或 MSB 优先)。

    【讨论】:

    • +1。这个 CRC16 是第 15 节末尾提到的那个:输入被反映(你已经反映了它)并且输出也被反映(即期望1000000100111101)。但多项式不应该被反映。
    • 我匹配的CRC实现是LSB优先。
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2022-07-06
    相关资源
    最近更新 更多