CRC校驗程式設計

2021-08-01 05:47:31 字數 2313 閱讀 4298

程式的宗旨:通過編寫crc的校驗程式,加深對crc原理的理解,同時學會將書本上的原理運用於實際,動手實踐才能學得更快。

注:本文關於crc原理那部分內容,來自網路蒐集。

1. 需求分析

編寫乙個crc校驗的模擬程式,該程式實現的功能如下:

輸入:一串二進位制位元串

輸出:crc校驗碼

2. crc校驗原理分析

在此,我們主要從適合於程式設計實現的角度分析crc校驗的演算法原理,而不只是書本上關於crc原理的介紹。

cyclic redundancy check迴圈冗餘檢驗,是基於資料計算一組效驗碼,用於核對資料傳輸過程中是否被更改或傳輸錯誤。

假設資料傳輸過程中需要傳送15位的二進位制資訊g=101001110100001,這串二進位製碼可表示為代數多項式g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1,其中g中第k位的值,對應g(x)中x^k的係數。將g(x)乘以x^m,既將g後加m個0,然後除以m階多項式h(x),得到的(m-1)階餘項r(x)對應的二進位製碼r就是crc編碼。 

h(x)可以自由選擇或者使用國際通行標準,一般按照h(x)的階數m,將crc演算法稱為crc-m,比如crc-8、crc-32、crc-64等。

g(x)和h(x)的除運算,可以通過g和h做xor(異或)運算。比如將11001與10101做xor運算:

例如使用crc-8演算法求101001110100001的效驗碼。crc-8標準的h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1,即h是9位的二進位制串111010101。

經過迭代運算後,最終得到的r是10001100,這就是crc效驗碼。

3  概要設計

基於以上原理,我們對軟體進行了初步的規劃和設計:

(1) 由於h(x)的選擇有多種標準,其原理都是類似的,故我們就選用crc-8標準來實現crc校驗的模擬。

(2) 由上述演算法原理可知,程式中需要使用到陣列或者佇列來實現資料的儲存和運算,由於c++中支援許多封裝得很好的容器來組織資料,例如:deque容器,故使用c++語言可以更加高效地完成所需要的功能。故我們的程式語言採用c++。

(3) 為了提供友好的使用者介面,我們採用visual c++的mfc框架構建應用程式,使用乙個簡單的對話方塊程式,包含乙個輸入編輯框和乙個輸出編輯框

4 詳細設計

4.1 資料結構的設計

定義三個bool型的佇列,deque,分別代表:輸入串暫存器、操作串暫存器、剩餘串暫存器。

其中:輸入串暫存器:用於存放使用者輸入的二進位制串

操作串暫存器:用於存放當前的被減數

剩餘串暫存器:用於存放輸入串暫存器沒有進入操作串暫存器的剩餘部分

定義乙個bool型的陣列,存放h(x)

const int crc8_hx_length = 9; // 採用crc-8演算法,故h(x)的長度為9 

bool hx[crc8_hx_length] = ;    //!< h(x)

定義兩個cstring型的變數,存放輸入的資料和輸出的資料。

4.2 模組劃分

模組功能概述:

輸入模組:獲取使用者的輸入二進位制串,並判斷輸入的正確性

暫存器初始化模組:將使用者的輸入字串轉化成0、1形式的數字串存放到輸入串暫存器中,並取出前9位數存放到操作暫存器中作為當前的被減數。

校驗碼計算模組:對操作暫存器的每一位與h(x)的對應的每一位進行異或,並將結果存放在操作暫存器的對應位置

操作暫存器移位模組:讓當前操作暫存器佇列隊首的所有0出隊,並從剩餘暫存器中補充對應個數的資料到操作暫存器佇列隊尾,供下一次異或操作。

顯示模組:將操作暫存器最終的crc校驗碼轉化成字串的形式以供輸出。

4.3 程式流程圖

5  程式執行效果及驗證

輸入字串驗證

原文**:

樂搏學院

資料校驗 CRC校驗

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

CRC校驗原理

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

CRC校驗原理

以下內容摘自筆者即將出版的最新著作 深入理解計算機網路 一書。本書將於12月底出版上市,敬請留意!本書原始目錄參見此文 5.3.2 迴圈冗餘校驗檢錯方案 上節介紹的奇偶校驗碼 pcc 只能校驗一位錯誤,本節所要介紹的迴圈冗餘校驗碼 crc 的檢錯能力更強,可以檢出多位錯誤。1.crc校驗原理 crc...