程式的宗旨:通過編寫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...