|
幫助理解CRC原理及應(yīng)用的經(jīng)典文章。
一、 CRC 原理
計(jì)算CRC的過(guò)程,就是用一個(gè)特殊的“除法”,來(lái)得到余數(shù),這個(gè)余數(shù)就是CRC。
它不是真正的算術(shù)上的除法!過(guò)程和算術(shù)除法過(guò)程一樣,只是加減運(yùn)算變成了XOR(異或)運(yùn)算!
算術(shù)上的除法:
120÷9=13 余 3,120是被除數(shù),9是除數(shù),13是商,3是余數(shù)。念作120除以9,或者9除120,或者9去除120! (除法的過(guò)程就不寫(xiě)了)
這個(gè)除法計(jì)算機(jī)當(dāng)然會(huì)做,但是做起來(lái)很麻煩,因?yàn)闇p法有借位,很耗時(shí)間和指令!
所以,計(jì)算CRC也是除法,但是用XOR來(lái)代替減法,這就簡(jiǎn)單多了!
CRC 的除法:
120÷9=14 余 6,商、余數(shù)和算術(shù)除法不一定相同! !因?yàn)槌ㄓ玫氖荴OR,而不是真正的減法。 以二進(jìn)制模擬這個(gè)計(jì)算過(guò)程:
0.png (125.41 KB, 下載次數(shù): 53)
下載附件
2018-1-17 20:51 上傳
接收端收到1111110,用它除以1001,計(jì)算得余數(shù)為000,就說(shuō)明收到的數(shù)據(jù)正確。 所以原始數(shù)據(jù)后面要先擴(kuò)展出3位0,以容納CRC值!
會(huì)發(fā)現(xiàn),在上面的除法過(guò)程中,這3位0,能保證所有的4個(gè)數(shù)據(jù)位在除法時(shí)都能夠被處理到!不然做一次除法就到結(jié)果了,那是不對(duì)的。這個(gè)概念后面要用到。
所以,實(shí)際上,數(shù)據(jù)是1111,CRC是110。
對(duì)于除數(shù)1001,我們叫它生成多項(xiàng)式,即生成項(xiàng),或POLY,即g(x)。
數(shù)據(jù)1111根據(jù)POLY1001,計(jì)算得到CRC110。
如果POLY不是1001,而是1011,那得到的CRC也是不同的!
所以生成項(xiàng)不同,得到的CRC也不同。要預(yù)先定義好POLY,發(fā)送端和接收端要用一樣的POLY!
0.png (129.3 KB, 下載次數(shù): 62)
下載附件
2018-1-17 20:53 上傳
0.png (72.41 KB, 下載次數(shù): 77)
下載附件
2018-1-17 20:53 上傳
0.png (153.15 KB, 下載次數(shù): 45)
下載附件
2018-1-17 20:54 上傳
完整的pdf格式文檔51黑下載地址(共31頁(yè)):
CRC32、CRC16、CRC原理和算法.pdf
(173.04 KB, 下載次數(shù): 94)
2018-1-17 09:41 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|