CRC16迴圈冗餘校驗

2021-08-21 20:49:23 字數 1015 閱讀 4010

原理:crc-16校驗碼計算方法:常用查表法和計算法。計算方法一般都是:

(1)、預置1個16位的暫存器為十六進製制ffff(即全為1),稱此暫存器為crc暫存器;

(2)、把第乙個8位二進位制資料(既通訊資訊幀的第乙個位元組)與16位的crc暫存器的低

8位相異或,把結果放於crc暫存器,高八位資料不變;

(3)、把crc暫存器的內容右移一位(朝低位)用0填補最高位,並檢查右移後的移出位;

(4)、如果移出位為0:重複第3步(再次右移一位);如果移出位為1,crc暫存器與多

項式a001(1010 0000 0000 0001)進行異或;

(5)、重複步驟3和4,直到右移8次,這樣整個8位資料全部進行了處理;

(6)、重複步驟2到步驟5,進行通訊資訊幀下乙個位元組的處理;

(7)、將該通訊資訊幀所有位元組按上述步驟計算完成後,得到的16位crc暫存器的高、低

位元組進行交換;

(8)、最後得到的crc暫存器內容即為:crc碼。

以上計算步驟中的多項式a001是8005按位顛倒後的結果。

查表法是將移位異或的計算結果做成了乙個表,就是將0~256放入乙個長度為16位的暫存器中的低八位,高八位填充0,然後將該暫存器與多項式0xa001按照上述3、4步驟,直到八位全部移出,最後暫存器中的值就是**中的資料,高八位、低八位分別單獨乙個表。

**:

/*  高位位元組的 crc  值*/ 

static unsigned char auchcrchi = ; 

/*  低位位元組的 crc  值*/ 

static char auchcrclo = ; 

unsigned short crc16(unsigned char*puchmsg,unsigned short usdatalen )  /*用於計算 crc的報文*/  /*報文中的位元組數*/ /*函式以unsigned short型別返回crc*/

return (uchcrchi<<8 | uchcrclo); 

CRC 16校驗原理

1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc 碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111 對應的多項式為x6 x4 x2 x 1 而多項式為...

迴圈冗餘校驗 CRC校驗

一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...

迴圈冗餘校驗CRC

網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...