CRC除数计算

Posted

技术标签:

【中文标题】CRC除数计算【英文标题】:CRC divisor calculation 【发布时间】:2011-11-08 10:57:59 【问题描述】:

我试图理解 CRC,但我对如何计算“除数”感到困惑。

在example on wikipedia 中,除数为 11 (1011),输入 11010011101100

11010011101100 000 <--- input left shifted by 3 bits
1011               <--- divisor (4 bits) = x³+x+1
------------------
01100011101100 000 <--- result

除数是如何计算的?在这个例子中 (x³+x+1) x 是 2? 2 是从哪里来的?

【问题讨论】:

二进制中的除数就是多项式的系数。 x^3 + x + 1 等于 1*x^3 + 0*x^2 + 1*x +1*1;读出系数得到 1-0-1-1 【参考方案1】:

写在下一句@wikipedia:

如果最左边除数位上方的输入位为 0,则不执行任何操作。如果最左边除数位上方的输入位为 1,则除数与输入进行异或。

这意味着:

1101 xor 1011 => 0110

【讨论】:

【参考方案2】:

从同一***的“CRC 数学”部分开始,“对这种类似除法的过程的数学分析揭示了如何选择保证良好错误检测特性的除数。”这是它的关键。有些除数比其他除数更好,因此您只需找到一个标准除数并经常使用即可。

该页面的底部描述了一些使用的不同 CRC 以及定义其除数的多项式。

【讨论】:

给定一个n 数字输入数据如何找出除数的位?【参考方案3】:

二进制中的除数只是其多项式的系数。 x^3 + x + 1 = 1x^3 + 0x^2 + 1x +11;读出系数得到 1 0 1 1

【讨论】:

以上是关于CRC除数计算的主要内容,如果未能解决你的问题,请参考以下文章

CRC32的计算方法

计算机网络复习7---差错检验CRC循环冗余检验

计算机网络复习7---差错检验CRC循环冗余检验

modbus协议CRC校验计算方式?该怎么计算?

基于Qt的CRC16校验实现(查表法)

CRC16校验码如何计算