CRC校驗的理解和C語言實現

2021-08-02 11:55:02 字數 1175 閱讀 3919

1、crc是什麼

crc檢驗的基本思想是利用線性編碼理論,在傳送端根據要傳送的k位二進位製碼序列,以一定的規則產生乙個檢驗碼r位(就是crc碼),附在資訊後面,構成乙個新的二進位製碼序列數共(k+r)位,最後傳送出去。接收端根據同樣的規則校驗,以確定傳送中是否出錯。接收端有兩種處理方式:1、計算k位序列的crc碼,與接收到的crc比較,一致則接收正確。2、計算整個k+r位的crc碼,若為0,則接收正確。

crc碼有多種檢驗位數,8位、16位、32位等,原理相同。16位的crc碼產生的規則是先將要傳送的二進位制序列數左移16位(即乘以2的16次方後),除以乙個多項式,最後所得到的餘數就是crc碼。

求crc碼所採用的是模2運算法則,即多項式除法中採用不帶借位的減法運算,運算等同於異或運算。

2.傳送端

int main()

; int crc = calcrc(0, buffer, 20);//crc為16位校驗碼

buffer[21] = (char)crc;//取校驗碼低八位

buffer[20] = (char)(crc >> 8);//取校驗碼高八位

}

3.接收端

int result = calcrc(0, buffer, 22);

if(result == 0)

4.完整**

int calcrc(int crc, const

char *buf, int len)

else}}

remainder=remainder^0x0000;

return remainder;

}int main(int argc, _tchar* argv)

; int crc = calcrc(0, buffer, 20);//計算得到的16位crc校驗碼

buffer[21] = (char)crc;//取校驗碼的低八位

buffer[20] = (char)(crc >> 8);//取校驗碼的高八位

//接收方在接收到buffer中的資料時,代入calcrc進行計算,若result的值為0,則說明資料傳輸過程無誤

int result = calcrc(0, buffer, 22);

return

0;}

c語言實現CRC校驗和

下面我就將今天的demo 簡單的注釋一下 在傳送方的buffer 22 中,前二十個資料為要傳送的資料,而後兩位即buffer 20 和buffer 21 中的資料就是函式int calcrc int crc,const char buf,int len 產生的crc校驗和。如下 intmain i...

CRC冗餘校驗的C語言實現

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

CRC校驗之查表法C語言實現

本文主要參考 實現查表法快速計算crc7.crc7應用在sd mmc的資料校驗,生成多項式x 7 x 3 1,生成的校驗值為7bit.很容易想到資料以 1byte 為單位進行計算比較方便.c語言 實現 include include includeusing namespace std const ...