基本原理及概念
CRC校验算法是在通信方面常用的一种差错检测的手段。原理是在将原始帧数据发送之前,在n个bit位的原始数据后面再加上通过特定运算得到的k位校验序列,组成新的帧再发送给接受端。接受端会根据原始数据后的校验序列再次进行特定运算,若结果正确,则接受;若结果错误,则丢弃。
我们将上面所述的k位校验序列称为帧检验序列FCS。
特定运算为多项式模2运算。(我更喜欢将它理解为异或运算)
CRC校验算法的重点是如何得到这k位帧检验序列,以及如何进行检测运算。
算法
生成多项式
一般在数据传输之前,发送端与接收端会相互约定好一个除数(也是一个二进制序列,用来进行模2算法)。这个除数就是生成多项式。称为G(X),这个多项式的最高位和最低位必须为1。我们可以定义自己的多项式,也有规定好的。常用的有:
CRC8=X8+X5+X4+1(100110001)
CRC-CCITT=X16+X12+X5+1(10