在進行crc原理解析之前,我們需要先了解什麼是模二除法,因為在crc校驗中使用的是模二除法,而非算術除法。
以120/9為例,比較一下兩種除法的區別:
120的二進位制:0b01111000
9的二進位制: 1001
算術除法: 120/9 = 13餘3
--------- 1101 除數
1001)1111000
。。。。。。0011 餘數
模二除法:120/9 = 14餘6
模二除法,既不向上借位,也不比較除數和被除數的相同位數值的大小。
模二加法:1+1=0,1+0=1,0+0=0
模二減法:1-1=0,1-0=1,0-1=1,0-0=0
模二的加減法等同於做異或(xor)
計算過程:
在學習crc校驗時,一定要明白模二除法,crc校驗是基於模二除法的。
crc演算法就是把傳輸資料當作乙個位數很長的數,然後將這個數模二除另乙個數(這個數對應的就是crc的多項式(poly)),其所得的餘數即為crc校驗碼。
舉個例子來說,傳輸資料為:10110011
除的另乙個數為(我們選擇的多項式):11001 (長度為5)
我們需要在傳輸資料後面補(多項式長度-1)個0
即: 101100110000
然後用這個資料對11001模二除,取得餘數0100,這個0100即是crc校驗碼。
我們會發現,crc校驗碼的長度為我們所選多項式的長度-1,同時也是我們所需要補0的長度。
任意乙個二進位制數,都可以對應乙個多項式。如:10011 對應x4+0x3+0x2+x1+1,簡化一下就是:x4+x1+1。(我們也會發現這就是crc-4)
所以就產生的了標準的crc生成多項式:
另外我們或許會有疑問,為何標準的多項式這樣選擇,而不是選擇其他的多項式?
這是因為不同的多項式校驗的效果不一,特別的多項式能夠明顯減小錯誤率。
迴圈冗餘校驗 CRC校驗
一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...
迴圈冗餘校驗CRC
網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...
CRC迴圈冗餘校驗
crc校驗原理 crc校驗原理看起來比較複雜,好難懂,因為大多數書上基本上是以二進位制的多項式形式來說明的。其實很簡單的問題,其根本思想就是先在要傳送的幀後面附加乙個數 這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位制序列的,下同 生成乙個新幀傳送給接收端。當然,這個附加的數不是隨意的,它要...