亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

C語言:CRC校驗

作者:xuchen   來源:xuchen的blog   點擊數:  更新時間:2014年05月28日   【字體:
一、CRC碼
CRC:Cylic Reduancy check譯作漢語就是循環冗余校驗碼。

二、XOR
XOR:邏輯運算符異或,不知道用符號怎么寫,總之其運算法則是,不同為1,相同為0。

三、用XOR代替算術運算上除法的兩個例子。
1、10110010000/11001
第一次異或(相除),得到商為1,余數為1111,加入下一位0,進行
第二次異或,得到商為1,余數為111,加入下一位1,余數為1111,四位與除數5位不能夠異或計算,所以此處商為0,加入下一位0,進行
第三次異或,得到商為1,余數為111,同理第5位商為0,余數繼續加入被除數的下一位0,進行
第四次異或,得到商為1,余數為101,加入后一位被除數的0,得到商為0,最終余數為1010,而最終商為1101010。計算流程如下圖所示:

如若讓被除數10110010000加上余數1010則為10110011010,再除以(異或)11001,則得到余數為0000(此處不再具體計算).
2、1111000/1001
經過三次異或(相除)得到商為1110,余數為110,具體例程如下,

同樣,讓該例的被除數1111000加上余數110后為1111110除以(異或)除數100則得到余數為000.

四、CRC校驗原理
由以上兩個例子可以看出,通信過程中加入想要傳送的數據是“被除數”,加上余數后再傳送。而接收一方接收完整數據后,除以除數,如果余數為0,則說明傳送的數據正確,如果不為0則說明傳送的數據有誤。因為對于一個確定的“除數”,則就會有唯一的余數與之對應。這個過程其實就是一個CRC的校驗過程。不過名稱改一下不能叫做被除數 除數什么的。可以規定上述的除數叫做生成多項式或生成項,用g(x)表示。而余數就叫做CRC校驗碼。由以上知道,對于不同的生成項,則就會有唯一的CRC校驗碼與之對應。而對于要傳送的數據也可以用一個系數僅為0和1取值的多項式一一對應。例如代碼1010111對應的多項式為x^6+x^4+x^2+x+1.而多項式x^5+x^3+x^2+x+1對應的代碼是101111.
實際上,上述的被除數并不是真正的要傳送的數據,真正要傳送的數據是一個多項式左移CRC校驗碼位數后的代碼。定義CRC校驗碼的位數表示它本身的寬度。
另外,關于生成項,不難發現其最高位是1,實際上在除法的每次XOR時候都要被消掉,所以一般第一個1不做參考,后面的幾位才是最重要的。這就是為什么生成項的位數比CRC寬度大1的原因。且生成項的最后一位也必須同時為1.一般生成項簡寫時候不寫最高位的1.以下是各種常用的生成項表達式:
CRC-4:x^4+x+1;-------------------------------->0x03
CRC-8:x^8+x^5+x^4+1;--------------------------->0x31
CRC-8:x^8+x^2+x^1+1;--------------------------->0x07
CRC-8:x^8+x^6+x^4+x^3+x^2+x;------------------->0x5E
CRC-12:x^12+x^11+x^4+x^3+x+1;------------------>0x80
CRC-16:x^16+x^15+x^2+1;------------------------>0x80005
CRC-16:x^16+x^12+x^5+1;------------------------>0x1021
CRC-32:x^32+x^26+x^23+....+x^2+x+1;------------>0x04C11DB7
CRC-32:x^32+x^28+x^27+....+x^8+x^6+1;---------->0x1EDC6F41

五、C語言的實現





附錄:

相關文章