C++開發(fā)之CRC校驗(yàn)實(shí)例詳解
CRC:(循環(huán)冗余校驗(yàn))
循環(huán)冗余校驗(yàn)是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,主要用來檢測(cè)或校驗(yàn)數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯(cuò)誤。其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。
工作原理:
CRC檢錯(cuò)方法的工作原理可以從發(fā)送端與接收端兩個(gè)方面進(jìn)行描述。
1)發(fā)送端將發(fā)送數(shù)據(jù)比特序列當(dāng)作一個(gè)多項(xiàng)式f(x),用雙方預(yù)先約定的生成多項(xiàng)式G(x)去除,求得一個(gè)余數(shù)多項(xiàng)式R(x)。將余數(shù)多項(xiàng)式加到數(shù)據(jù)多項(xiàng)式之后,一起發(fā)送到接收端。
2)接收端用同樣的生成多項(xiàng)式G(x)去除接收到的數(shù)據(jù)多項(xiàng)式f'(x),得到計(jì)算余數(shù)R'(x)。如果計(jì)算余數(shù)多項(xiàng)式R'(x)與接收余數(shù)多項(xiàng)式R(x)相同,表示傳輸無(wú)差錯(cuò);否則,表示傳輸有差錯(cuò),通知發(fā)送端重傳數(shù)據(jù),直至正確為止。
eg:
1)發(fā)送數(shù)據(jù)比特序列為:f(x)=110011
2)生成多項(xiàng)式比特序列為:G(x)=11001 (N=5,k=4)
3)將發(fā)送數(shù)據(jù)比特序列乘以2的4次方,即產(chǎn)生的乘積為:1100110000
4)將乘積用生成多項(xiàng)式比特序列去除,按模2算法求得余數(shù)為:1001

5)將余數(shù)比特序列加到乘積中得:
1 1 0 0 1 1 + 1 0 0 1 = 1 1 0 0 1 1 1 0 0 1
6)如果在數(shù)據(jù)傳輸過程中沒有發(fā)送錯(cuò)誤,接收端收到的帶有CRC校驗(yàn)碼的數(shù)據(jù)比特序列一定能被相同的生成多項(xiàng)式整除:

CRC的檢錯(cuò)能力:
1)能夠檢查出全部離散的1位錯(cuò)。
2)能夠檢查出全部離散的2位錯(cuò)。
3)能夠檢查出全部奇數(shù)錯(cuò)。
4)能夠檢查出全部長(zhǎng)度小于或等于k位的突發(fā)錯(cuò)。
5)能以[1-(1/2)^(k-1)]的概率檢查出長(zhǎng)度為k+1位的突發(fā)錯(cuò)。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C語(yǔ)言簡(jiǎn)易通訊錄的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)易通訊錄的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
solaris操作系統(tǒng)做c應(yīng)用程序開發(fā)步驟
solaris操作系統(tǒng)做c應(yīng)用程序開發(fā)步驟,大家參考使用吧2013-12-12
關(guān)于C/C++中的side effect(負(fù)效應(yīng))和sequence point(序列點(diǎn))
不知你在寫code時(shí)是否遇到這樣的問題?int i = 3; int x = (++i) + (++i) + (++i); 問x值為多少?進(jìn)行各種理論分析,并在編譯器上實(shí)踐,然而可能發(fā)現(xiàn)最終的結(jié)果是不正確的,也是不穩(wěn)定的,不同的編譯器可能會(huì)產(chǎn)生不同的結(jié)果。這讓人很頭疼2013-10-10
帶你了解C語(yǔ)言的數(shù)據(jù)的存儲(chǔ)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的數(shù)據(jù)的存儲(chǔ),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助2021-08-08
Qt+Quick實(shí)現(xiàn)播放音樂和視頻的開發(fā)
這篇文章主要為大家詳細(xì)介紹了如何利用Qt+Quick實(shí)現(xiàn)播放音樂和視頻的開發(fā),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03

