CRC校驗原理(cyclic redundancy check)

1、CRC基於“模二運算”。

模二運算類似於普通二進制運算,但是區別在於無進位和借位。


例如:

加法:010+110=100

減法:010-110=100

無進位和借位使得模二運算的加減法相當於異或操作。


乘法:

     1010

*      101

————

     1010

   0000

 1010

————

 100010


除法:


看的出來,模二運算的乘除也和普通二進制的乘除類似,唯一差別就是無進位借位(除法樣例中的餘數前面多的那個0可以不用管,看了下面就知道了)


2、CRC校驗流程

1)選定一個除數(術語叫生成多項式),假設這個除數二進制爲k位。

2)原碼左移k-1位得到一個新碼,比如原碼1001,k爲4,那麼移位後就變成1001000。

3)新碼模二除以這個除數,得到一個k-1位的餘數(校驗碼)。如果餘數不滿k-1位,就手動在前面用0補滿,比如如果餘1,那就補成001。

4)把新碼加上這個校驗碼得到CRC碼,比如按以上樣例,最終的CRC碼就是1001001。

5)發送

6)接收之後用這個CRC碼除以之前選擇的除數,餘數爲0則傳輸沒有出錯。否則根據餘數和生成多項式的一些運算(書上寫的簡直一堆crap,看不懂),可以得到出錯位。



(圖片來自http://blog.csdn.net/lycb_gz/article/details/8201987

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章