CRC实现

CRC实现@TOC

CRC原理

crc原理是通过与固定的值(poly)异或运算得到余数实现的。具体推导过程可参考《A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS》
如下所示:
数据:1010110011
固定值(poly):1001 x^3+1
计算如下:首先将数据向左移动3位,低位补零
CRC实现
#运算过程分析:
运算目的是消掉发送数据最高位的1,直到得到的值小于poly即是余数。余数加到数据后面发送,这也是为什么需要将数据位左移的原因;接收端再用同样的方法来计算看得到的数值是否为一个与输入数据流无关的常量。
#从运算过程来看,每当数据位出现首个1,那么就将poly与之对齐并消掉首个1,这是在移动poly;可以换一个角度,将poly固定,移动数据直到出现数据首位为1则与结果继续与poly异或否则保持。如果数据首位是1那么与poly异或后必定为0,那么我们可以把poly的首位去掉变为001,在数据位左移的过程中出现1左移1位并与001异或直到得到余数为止。