日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc...

發布時間:2024/3/24 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

crc校驗方法,用c語言實現源代碼(CRC checksum method, using C language source code)

crc校驗方法,用c語言實現源代碼(CRC checksum method, using C language source code)

CRC (Cyclic Redundancy Check) 校驗應用較為廣泛, 以前為了處理簡單, 在程序中大多數采用lrc (longitudinal Redundancy Check) 校驗, lrc校驗很好理解, 編程實現簡單.用了一天時間研究了crc的c語言實現, 理解和掌握了基本原理和c語言編程.結合自己的理解簡單寫下來.

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運算法則, 即多項式除法中采用不帶借位的減法運算, 運算等同于異或運算.這一點要仔細理解, 是編程的基礎.

CRC - 16: (美國二進制同步系統中采用) G (X) = x16 + x15 + x2 + 1

CRC CCITT: (由歐洲ccitt推薦) G (X) = x16 + X12 + X5 + 1

CRC - 32: G (X) = + x22 + x32 + x26 X23 + x16 + X12 + X11 + X10 + x8 + X5 + X4 + + X7 x1 + x2 + 1

2、按位計算crc

采用crc - ccitt多項式, 多項式為0x11021, c語言編程時, 參與計算為0x1021, 這個地方得深入思考才能體會其中的奧妙, 分享一下我的思路: 當按位計算crc時, 例如計算二進制序列為1001 1010 1010 1111時, 將二進制序列數左移16位, 即為1001 1010 1010 (1111 0000 0000 0000 0000 0000 0000 0000), 實際上該二進制序列可拆分為1000 (0000 0000 0000 0000 0000 0000 0000 (000) + 0000 0000 0000 0000 0000 0000 0000 (00) + 0000 0000 0000 1 0000 0000 0000 0000) + (0000 0000 0000 0000 +......)

現在開始分析運算:

< 1 > 對第一個二進制分序列求余數, 豎式除法即為0x10000 ^ 0x11021運算, 后面的0位保留;

< 2 > 接著對第二個二進制分序列求余數, 將第一步運算的余數 * 2后再和第二個二進制分序列一起對0x11021求余, 這一步理解應該沒什么問題.如果該分序列為0, 無需計算.

對其余的二進制序列求余與上面兩步相同 < 3 >.

< 4 > 計算到最后一位時即為整個二進制序列的余數, 即為crc校驗碼.

該計算方法相當于對每一位計算,

The operation process is easy to understand and accounts for less memory. The disadvantage is that one bit computing is time-consuming.

C language implementation is given below:

Copy the code code as follows:

Unsigned, char, test[16] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa, 0xbb, 0xCC, 0xdd, 0xEE, 0xff};

Unsigned char len = 16;

Void main (void)

{

Unsigned long temp = 0;

Unsigned int crc;

Unsigned char i;

Unsigned, char, *ptr = test;

While (len--) {

For (I = 0x80, I = 0, I = I, 1) {

Temp = temp * 2;

If ((temp & 0x10000) = = 0)

Temp

總結

以上是生活随笔為你收集整理的c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。