帮助理解CRC原理及应用的经典文章。
一、 CRC 原理
计算CRC的过程,就是用一个特殊的“除法”,来得到余数,这个余数就是CRC。
它不是真正的算术上的除法!过程和算术除法过程一样,只是加减运算变成了XOR(异或)运算!
算术上的除法:
120÷9=13 余 3,120是被除数,9是除数,13是商,3是余数。念作120除以9,或者9除120,或者9去除120! (除法的过程就不写了)
这个除法计算机当然会做,但是做起来很麻烦,因为减法有借位,很耗时间和指令!
所以,计算CRC也是除法,但是用XOR来代替减法,这就简单多了!
CRC 的除法:
120÷9=14 余 6,商、余数和算术除法不一定相同! !因为除法用的是XOR,而不是真正的减法。 以二进制模拟这个计算过程:
接收端收到1111110,用它除以1001,计算得余数为000,就说明收到的数据正确。 所以原始数据后面要先扩展出3位0,以容纳CRC值!
会发现,在上面的除法过程中,这3位0,能保证所有的4个数据位在除法时都能够被处理到!不然做一次除法就到结果了,那是不对的。这个概念后面要用到。
所以,实际上,数据是1111,CRC是110。
对于除数1001,我们叫它生成多项式,即生成项,或POLY,即g(x)。
数据1111根据POLY1001,计算得到CRC110。
如果POLY不是1001,而是1011,那得到的CRC也是不同的!
所以生成项不同,得到的CRC也不同。要预先定义好POLY,发送端和接收端要用一样的POLY!
完整的pdf格式文档51黑下载地址(共31页):
CRC32、CRC16、CRC原理和算法.pdf
(173.04 KB, 下载次数: 92)
|