一文了解CRC校驗(yàn)算法知識
一口君最近工作用到CRC校驗(yàn),順便整理本篇文章和大家一起研究。
一、CRC概念
1. 什么是CRC?
CRC(Cyclic Redundancy Checksum)是一種糾錯技術(shù),代表循環(huán)冗余校驗(yàn)和。
數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯校驗(yàn)碼,其信息字段和校驗(yàn)字段長度可以任意指定,但要求通信雙方定義的CRC標(biāo)準(zhǔn)一致。主要用來檢測或校驗(yàn)數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯誤。它的使用方式可以說明如下圖所示:
在數(shù)據(jù)傳輸過程中,無論傳輸系統(tǒng)的設(shè)計(jì)再怎么完美,差錯總會存在,這種差錯可能會導(dǎo)致在鏈路上傳輸?shù)囊粋或者多個幀被破壞(出現(xiàn)比特差錯,0變?yōu)?,或者1變?yōu)?),從而接受方接收到錯誤的數(shù)據(jù)。
為盡量提高接受方收到數(shù)據(jù)的正確率,在接收方接收數(shù)據(jù)之前需要對數(shù)據(jù)進(jìn)行差錯檢測,當(dāng)且僅當(dāng)檢測的結(jié)果為正確時接收方才真正收下數(shù)據(jù)。檢測的方式有多種,常見的有奇偶校驗(yàn)、因特網(wǎng)校驗(yàn)和循環(huán)冗余校驗(yàn)等。
2. 使用方法概述
循環(huán)冗余校驗(yàn)是一種用于校驗(yàn)通信鏈路上數(shù)字傳輸準(zhǔn)確性的計(jì)算方法(通過某種數(shù)學(xué)運(yùn)算來建立數(shù)據(jù)位和校驗(yàn)位的約定關(guān)系的 )。
發(fā)送方計(jì)算機(jī)使用某公式計(jì)算出被傳送數(shù)據(jù)所含信息的一個值,并將此值 附在被傳送數(shù)據(jù)后,接收方計(jì)算機(jī)則對同一數(shù)據(jù)進(jìn)行 相同的計(jì)算,應(yīng)該得到相同的結(jié)果。
如果這兩個 CRC結(jié)果不一致,則說明發(fā)送中出現(xiàn)了差錯,接收方計(jì)算機(jī)可要求發(fā)送方計(jì)算機(jī)重新發(fā)送該數(shù)據(jù)。
3. 應(yīng)用廣泛
在諸多檢錯手段中,CRC是最著名的一種。CRC的全稱是循環(huán)冗余校驗(yàn),其特點(diǎn)是:檢錯能力強(qiáng),開銷小,易于用編碼器及檢測電路實(shí)現(xiàn)。從其檢錯能力來看,它所不能發(fā)現(xiàn)的錯誤的幾率僅為0.0047%以下。
從性能上和開銷上考慮,均遠(yuǎn)遠(yuǎn)優(yōu)于奇偶校驗(yàn)及算術(shù)和校驗(yàn)等方式。
因而,在數(shù)據(jù)存儲和數(shù)據(jù)通訊領(lǐng)域,CRC無處不在:著名的通訊協(xié)議X.25的FCS(幀檢錯序列)采用的是CRC-CCITT,WinRAR、NERO、ARJ、LHA等壓縮工具軟件采用的是CRC32,磁盤驅(qū)動器的讀寫采用了CRC16,通用的圖像存儲格式GIF、TIFF等也都用CRC作為檢錯手段。
二、CRC名稱的定義
這里需要知道幾個組成部分或者說計(jì)算概念:多項(xiàng)式公式、多項(xiàng)式簡記式、數(shù)據(jù)寬度、初始值、結(jié)果異或值、輸入值反轉(zhuǎn)、輸出值反轉(zhuǎn)、參數(shù)模型。
1、多項(xiàng)式公式
對于CRC標(biāo)準(zhǔn)除數(shù),一般使用多項(xiàng)式(或二項(xiàng)式)公式表示,如下圖中除數(shù)11011(poly值為0x1c)的二項(xiàng)式為G(X)=X4+X3+X+1,X的指數(shù)就代表了該bit位上的數(shù)據(jù)為1,(最低位為0)。
這里特別注意一下位數(shù)問題,除數(shù)的位數(shù)為二項(xiàng)式最高次冪+1(4+1=5),這個很重要。
2、多項(xiàng)式簡記式
通過對CRC的基本了解我們知道,多項(xiàng)式的首尾必定為1,而這個1的位置在下一步計(jì)算一定為0,所以就把前面這個1給省略掉了,出現(xiàn)了一個叫簡記式的東西,如上例中除數(shù)11011的簡記式為1011,很多看過CRC高級語言源碼的人會知道,對于CRC_16標(biāo)準(zhǔn)下G(X)=X16+X15+X2+1(16#18005)的poly值實(shí)際上是8005,這里使用的就是簡記式。后面會對這個用法做一個說明。
3、數(shù)據(jù)寬度
數(shù)據(jù)寬度指的就是CRC校驗(yàn)碼的長度(二進(jìn)制位數(shù)),知道了CRC的運(yùn)算概念和多項(xiàng)式,就可以理解這個概念了,CRC長度始終要比除數(shù)位數(shù)少1,與簡記式長度是一致的。
以上三個數(shù)據(jù)就是我們經(jīng)常能夠用到的基本數(shù)據(jù)
4、初始值與結(jié)果異或值
在一些標(biāo)準(zhǔn)中,規(guī)定了初始值,則數(shù)據(jù)在進(jìn)行上述二項(xiàng)式運(yùn)算之前,需要先將要計(jì)算的數(shù)據(jù)與初始值的最低字節(jié)進(jìn)行異或,然后再與多項(xiàng)式進(jìn)行計(jì)算。
而在結(jié)果異或值不為零的情況下,則需要將計(jì)算得到的CRC結(jié)果值再與結(jié)果異或值進(jìn)行一次異或計(jì)算,得到的最終值才是我們需要的CRC校驗(yàn)碼。
這里可以看出,初始值與結(jié)果值的位數(shù)要求與數(shù)據(jù)寬度一致。
5、輸入值反轉(zhuǎn)與輸出值反轉(zhuǎn)
輸入值反轉(zhuǎn)的意思是在計(jì)算之前先將二項(xiàng)式反轉(zhuǎn),然后再用得到的新值和數(shù)據(jù)進(jìn)行計(jì)算。如對于G(X)=X16+X15+X2+1(16#18005),其正向值為1 1000 0000 0000 0101,反轉(zhuǎn)值則為1010 0000 0000 0001 1
輸出值反轉(zhuǎn)則是將最終得到的CRC結(jié)果反轉(zhuǎn)。
通常,輸入值反轉(zhuǎn)后的結(jié)果值也會是反轉(zhuǎn)的,所以這兩個選項(xiàng)一般是同向的,我們只有在在線CRC計(jì)算器中會看到自由選擇正反轉(zhuǎn)的情況存在。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會
-
即日-5.15立即報(bào)名>>> 【在線會議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評>> 【評選】維科杯·OFweek2025中國工業(yè)自動化及數(shù)字化行業(yè)年度評選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 小米YU7新增835公里續(xù)航版,6-7月面市
- 3 昆侖萬維24年?duì)I收56億,AI出海商業(yè)化獲重要進(jìn)展
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺
- 5 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 6 光計(jì)算迎來商業(yè)化突破,但落地仍需時間
- 7 大模型下半場:Agent時代為何更需要開源模型
- 8 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?
- 9 中國“智造”背后的「關(guān)鍵力量」
- 10 全球無人駕駛技術(shù)排名:誰才是細(xì)分賽道的扛把子?