資源描述:
《計(jì)算法簡(jiǎn)單實(shí)現(xiàn)crc校驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、計(jì)算法簡(jiǎn)單實(shí)現(xiàn)crc校驗(yàn)-------------------0100101001110101<-16bCRC仿此,可推出兩個(gè)字節(jié)數(shù)據(jù)計(jì)算如下:d為數(shù)據(jù),p為項(xiàng)式,a為余數(shù)dddddddddddddddd0000000000000000<-數(shù)據(jù)D(D1,D0,0,0)pppppppppppppppp<-多項(xiàng)式P-----------------------------------...aaaaaaaaaaaaaaaa0<-第一次的余數(shù)A’(A’1,A’0)ppppppppppp
2、ppppp--------------------------...aaaaaaaaaaaaaaaa<-結(jié)果A(A1,A0)由此與一字節(jié)的情況比較,將兩個(gè)字節(jié)分開計(jì)算如下:先算高字節(jié):dddddddd000000000000000000000000<-D1,0,0,0pppppppppppppppp<-P-------------------------)的返回值是與d一一對(duì)應(yīng)的,總數(shù)為256項(xiàng),將這些數(shù)據(jù)預(yù)先算出保存在表里,f(d)就轉(zhuǎn)換為一個(gè)查表的過程,速度也就可以大幅提高,這也
3、就是查表法計(jì)算CRC的原理。再來(lái)看CRC表是如何計(jì)算出來(lái)的,即函數(shù)f(d)的實(shí)現(xiàn)方法。分析前面一個(gè)字節(jié)數(shù)據(jù)的計(jì)算過程可發(fā)現(xiàn),d對(duì)結(jié)果的影響只表現(xiàn)為對(duì)P的移位異或,看計(jì)算過程中的三個(gè)8位的列中只低兩個(gè)字節(jié)的最后結(jié)果是余數(shù),而數(shù)據(jù)所在的高8位列最后都被消去了,因其中的運(yùn)算均為異或,不產(chǎn)生進(jìn)位或借位,故每一位數(shù)據(jù)只影響本列的結(jié)果,即d并不100001//P-------------------0100101001110101現(xiàn)在的問題就是如何根據(jù)d來(lái)對(duì)P移位異或了,從上面的例子看,也可以理解為每步移位,但根
4、據(jù)d決定中間余數(shù)是否與P異或。從前面原來(lái)的例子可以看出,決定的條件是中間余數(shù)的最高位為0,因?yàn)镻的最高位一定為1,即當(dāng)中間余數(shù)與d相應(yīng)位異或的最高位為1時(shí),中間余數(shù)移位就要和P異或,否則只需移位即可。其方法如下例(上例的變形,注意其中空格的移動(dòng)表現(xiàn)了d的影響如何被排除在結(jié)果之外):d--------a--------10000000000000000<-HSB=10000000000000000<-a<<=10001000000100001<-不含最高位的1-------
5、----------1000100000010000100100000010000100001000000100001-----------------00011000001100011<-HSB=00110000011000110-----------------10110000011000110<-HSB=111000001100011000001000000100001-----------------11101000110101101<-HSB=010100011010110
6、10-----------------01010001101011010<-HSB=101000110101101000001000000100001-----------------00101011010010101<-HSB=01010110100101010-----------------01010110100101010<-HSB=101011010010101000001000000100001-----------------0100101001110101<-C
7、RC結(jié)合這些,前面的程序就好理解了。