crc校驗(yàn)原理_怎樣修復(fù)crc校驗(yàn)錯(cuò)誤
crc校驗(yàn)原理
利用CRC進(jìn)行檢錯(cuò)的過(guò)程可簡(jiǎn)單描述為:在發(fā)送端根據(jù)要傳送的k位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的r位監(jiān)督碼(CRC碼),附在原始信息后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列數(shù)共k+r位,然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。這個(gè)規(guī)則,在差錯(cuò)控制理論中稱(chēng)為“生成多項(xiàng)式”。
代數(shù)學(xué)的一般性算法
在代數(shù)編碼理論中,將一個(gè)碼組表示為一個(gè)多項(xiàng)式,碼組中各碼元當(dāng)作多項(xiàng)式的系數(shù)。例如 1100101 表示為
1?x6+1?x5+0?x4+0?x3+1?x2+0?x+1,即 x6+x5+x2+1。
設(shè)編碼前的原始信息多項(xiàng)式為P(x),P(x)的最高冪次加1等于k;生成多項(xiàng)式為G(x),G(x)的最高冪次等于r;CRC多項(xiàng)式為R(x);編碼后的帶CRC的信息多項(xiàng)式為T(mén)(x)。
發(fā)送方編碼方法:將P(x)乘以xr(即對(duì)應(yīng)的二進(jìn)制碼序列左移r位),再除以G(x),所得余式即為R(x)。用公式表示為
T(x)=xrP(x)+R(x)
接收方解碼方法:將T(x)除以G(x),如果余數(shù)為0,則說(shuō)明傳輸中無(wú)錯(cuò)誤發(fā)生,否則說(shuō)明傳輸有誤。(G(x)是變量,可根據(jù)用戶(hù)的需要自行設(shè)計(jì),但好壞區(qū)別,一般位數(shù)與數(shù)據(jù)長(zhǎng)度相等,首位和末位為1)
舉例來(lái)說(shuō),設(shè)信息碼為1100,生成多項(xiàng)式為1011,即P(x)=x3+x2,G(x)=x3+x+1,計(jì)算CRC的過(guò)程為
xrP(x) =x3(x3+x2) =x6+x5???? 左移三位
G(x) =x3+x+1 即 R(x)=x。
注意到G(x)最高冪次r=3,得出CRC為010。
如果用豎式除法,計(jì)算過(guò)程為(用異或計(jì)算)以G(x)為準(zhǔn),左移它的最高次位(r)再除以它本身求余可得可得一個(gè)的位的CRC碼
1100000/1011 =111000/1011 =10100/1011=010(校驗(yàn)碼)
因此,T(x)=(x6+x5)+(x)=x6+x5+x, 即 1100000+010=1100010
如果傳輸無(wú)誤,T(x) x6+x5+x ------ = --------- = x3+x2+x, G(x) x3+x+1無(wú)余式?;仡^看一下上面的豎式除法,如果被除數(shù)是1100010,顯然在商第三個(gè)1時(shí),就能除盡。
上述推算過(guò)程,有助于我們理解CRC的概念。但直接編程來(lái)實(shí)現(xiàn)上面的算法,不僅繁瑣,效率也不高。實(shí)際上在工程中不會(huì)直接這樣去計(jì)算和驗(yàn)證CRC。
下表中列出了一些見(jiàn)于標(biāo)準(zhǔn)的CRC資料:
生成多項(xiàng)式的最高冪次項(xiàng)系數(shù)是固定的1,故在簡(jiǎn)記式中,將最高的1統(tǒng)一去掉了,如04C11DB7實(shí)際上是104C11DB7。 ** 前稱(chēng)CRC-CCITT。ITU的前身是CCITT。
備注:
(1)生成多項(xiàng)式是標(biāo)準(zhǔn)規(guī)定的
(2)CRC校驗(yàn)碼是基于將位串看作是系數(shù)為0或1的多項(xiàng)式,一個(gè)k位的數(shù)據(jù)流可以看作是關(guān)于x的從k-1階到0階的k-1次多項(xiàng)式的系數(shù)序列。采用此編碼,發(fā)送方和接收方必須事先商定一個(gè)生成多項(xiàng)式G(x),其高位和低位必須是1。要計(jì)算m位的幀M(x)的校驗(yàn)和,基本思想是將校驗(yàn)和加在幀的末尾,使這個(gè)帶校驗(yàn)和的幀的多項(xiàng)式能被G(x)除盡。當(dāng)接收方收到加有校驗(yàn)和的幀時(shí),用G(x)去除它,如果有余數(shù),則CRC校驗(yàn)錯(cuò)誤,只有沒(méi)有余數(shù)的校驗(yàn)才是正確的。
CRC說(shuō)了那么多實(shí)則是用一個(gè)規(guī)定的多項(xiàng)式(假設(shè)最高次是r,當(dāng)然包含r+1位)把要發(fā)送的數(shù)據(jù)左移r位后,再去除那個(gè)多項(xiàng)式,當(dāng)然會(huì)得到一個(gè)余數(shù)(設(shè)為r(x),)那么這個(gè)余數(shù)是r位的二進(jìn)制數(shù)。最后把它填充到數(shù)據(jù)移出的空位上去,這樣變可以發(fā)送了,至于發(fā)送了幾位接收了幾位的細(xì)節(jié)問(wèn)題自己考慮好了。
修復(fù)crc校驗(yàn)錯(cuò)誤
當(dāng)我們?cè)诮鈮篟AR時(shí),提示“CRC校驗(yàn)失敗,文件被破壞”,那么這個(gè)時(shí)候我們要怎么處理呢,有沒(méi)有辦法可以解決,怎么修復(fù)crc校驗(yàn)錯(cuò)誤?下面看一下有什么方法。
辦法一:WinRAR本身就帶有壓縮包修復(fù)功能。點(diǎn)擊菜單“工具”下的“修復(fù)壓縮文件”即可,快捷鍵是“ALT+R”。此法可修復(fù)一部分壓縮包的常規(guī)錯(cuò)誤,但是成功率不高。你可以試著連續(xù)修復(fù)幾次。WinRAR的這個(gè)功能對(duì)壓縮包里有很多文件且文件容量都比較小的情況比較適用。
辦法二: 打開(kāi)壓縮包(不是解壓,而是用WinRAR打開(kāi)),選中你要解壓縮的文件,單擊鼠標(biāo)右鍵,在彈出的菜單里選擇“無(wú)需確認(rèn)直接解壓縮”,快捷鍵是“ALT+W”。用此方法,不管是好的壓縮包還是壞的壓縮包,統(tǒng)統(tǒng)暢行無(wú)阻,成功率100%!
辦法三:釜底抽薪法!其原理就是讓RAR壓縮包內(nèi)損壞的文件解壓縮出來(lái),不理會(huì)WinRAR的警告,能解壓多少就解壓多少。解壓縮軟件還是用WinRAR,不過(guò)要做小小的設(shè)置。
在右鍵點(diǎn)擊解壓縮文件后跳出的窗口里,把“保留被損壞的文件”復(fù)選框選中,點(diǎn)擊確定開(kāi)始解壓縮。不要理會(huì)解壓縮出錯(cuò)的信息,解壓縮結(jié)束之后你會(huì)發(fā)現(xiàn)損壞的文件被解壓出來(lái)了。經(jīng)過(guò)這樣解壓出來(lái)的損壞文件能正常使用的幾率還是非常高的。
以上幾點(diǎn),可以使一些破損的文件得到恢復(fù),但也不是百分之百有用的。但大部份還是可以用的。希望以上對(duì)大家能有所幫助。
CRC校驗(yàn)相關(guān)文章:
非常好我支持^.^
(637) 40.1%
不好我反對(duì)
(952) 59.9%
相關(guān)閱讀:
- [電子說(shuō)] 鴻蒙微信更新:修復(fù)用戶(hù)備注可見(jiàn)隱私漏洞 2024-12-05
- [電子說(shuō)] 電阻器故障識(shí)別與修復(fù)方法 電流分配與電阻器的配置原則 2024-12-04
- [電子說(shuō)] OpenWrt 推出了自己的完全可修復(fù)硬件-OpenWrt One開(kāi)源路由器 2024-12-03
- [電子說(shuō)] PyTorch 2.5.1: Bugs修復(fù)版發(fā)布 2024-12-03
- [電子說(shuō)] 顛覆性創(chuàng)新技術(shù)——特斯拉土壤修復(fù)機(jī)器人! 2024-11-27
- [電子說(shuō)] 汽車(chē)照明系統(tǒng)故障診斷與修復(fù)指南 2024-11-11
- [電子說(shuō)] 無(wú)需大范圍拆卸,快速恢復(fù)鋼鐵軋機(jī)牌坊窗口精度 2024-11-11
- [電子說(shuō)] 減速機(jī)軸磨損,如何在現(xiàn)場(chǎng)快速恢復(fù)原始尺寸和性能 2024-11-04
( 發(fā)表人:姚遠(yuǎn)香 )