您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>電腦硬件>臺式機>

crc校驗原理_怎樣修復crc校驗錯誤

2012年09月05日 09:26 本站整理 作者:秩名 用戶評論(0

crc校驗原理
利用CRC進行檢錯的過程可簡單描述為:在發(fā)送端根據(jù)要傳送的k位二進制碼序列,以一定的規(guī)則產(chǎn)生一個校驗用的r位監(jiān)督碼(CRC碼),附在原始信息后邊,構成一個新的二進制碼序列數(shù)共k+r位,然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進行檢驗,以確定傳送中是否出錯。這個規(guī)則,在差錯控制理論中稱為“生成多項式”。
代數(shù)學的一般性算法
在代數(shù)編碼理論中,將一個碼組表示為一個多項式,碼組中各碼元當作多項式的系數(shù)。例如 1100101 表示為
1?x6+1?x5+0?x4+0?x3+1?x2+0?x+1,即 x6+x5+x2+1。
設編碼前的原始信息多項式為P(x),P(x)的最高冪次加1等于k;生成多項式為G(x),G(x)的最高冪次等于r;CRC多項式為R(x);編碼后的帶CRC的信息多項式為T(x)。
發(fā)送方編碼方法:將P(x)乘以xr(即對應的二進制碼序列左移r位),再除以G(x),所得余式即為R(x)。用公式表示為
T(x)=xrP(x)+R(x)
接收方解碼方法:將T(x)除以G(x),如果余數(shù)為0,則說明傳輸中無錯誤發(fā)生,否則說明傳輸有誤。(G(x)是變量,可根據(jù)用戶的需要自行設計,但好壞區(qū)別,一般位數(shù)與數(shù)據(jù)長度相等,首位和末位為1)
舉例來說,設信息碼為1100,生成多項式為1011,即P(x)=x3+x2,G(x)=x3+x+1,計算CRC的過程為
xrP(x) =x3(x3+x2) =x6+x5???? 左移三位
G(x) =x3+x+1 即 R(x)=x。
注意到G(x)最高冪次r=3,得出CRC為010。
如果用豎式除法,計算過程為(用異或計算)以G(x)為準,左移它的最高次位(r)再除以它本身求余可得可得一個的位的CRC碼
1100000/1011 =111000/1011 =10100/1011=010(校驗碼)
因此,T(x)=(x6+x5)+(x)=x6+x5+x, 即 1100000+010=1100010
如果傳輸無誤,T(x) x6+x5+x ------ = --------- = x3+x2+x, G(x) x3+x+1無余式?;仡^看一下上面的豎式除法,如果被除數(shù)是1100010,顯然在商第三個1時,就能除盡。
上述推算過程,有助于我們理解CRC的概念。但直接編程來實現(xiàn)上面的算法,不僅繁瑣,效率也不高。實際上在工程中不會直接這樣去計算和驗證CRC。
下表中列出了一些見于標準的CRC資料:

生成多項式的最高冪次項系數(shù)是固定的1,故在簡記式中,將最高的1統(tǒng)一去掉了,如04C11DB7實際上是104C11DB7。 ** 前稱CRC-CCITT。ITU的前身是CCITT。
備注:
(1)生成多項式是標準規(guī)定的
(2)CRC校驗碼是基于將位串看作是系數(shù)為0或1的多項式,一個k位的數(shù)據(jù)流可以看作是關于x的從k-1階到0階的k-1次多項式的系數(shù)序列。采用此編碼,發(fā)送方和接收方必須事先商定一個生成多項式G(x),其高位和低位必須是1。要計算m位的幀M(x)的校驗和,基本思想是將校驗和加在幀的末尾,使這個帶校驗和的幀的多項式能被G(x)除盡。當接收方收到加有校驗和的幀時,用G(x)去除它,如果有余數(shù),則CRC校驗錯誤,只有沒有余數(shù)的校驗才是正確的。
CRC說了那么多實則是用一個規(guī)定的多項式(假設最高次是r,當然包含r+1位)把要發(fā)送的數(shù)據(jù)左移r位后,再去除那個多項式,當然會得到一個余數(shù)(設為r(x),)那么這個余數(shù)是r位的二進制數(shù)。最后把它填充到數(shù)據(jù)移出的空位上去,這樣變可以發(fā)送了,至于發(fā)送了幾位接收了幾位的細節(jié)問題自己考慮好了。

修復crc校驗錯誤
當我們在解壓RAR時,提示“CRC校驗失敗,文件被破壞”,那么這個時候我們要怎么處理呢,有沒有辦法可以解決,怎么修復crc校驗錯誤?下面看一下有什么方法。
辦法一:WinRAR本身就帶有壓縮包修復功能。點擊菜單“工具”下的“修復壓縮文件”即可,快捷鍵是“ALT+R”。此法可修復一部分壓縮包的常規(guī)錯誤,但是成功率不高。你可以試著連續(xù)修復幾次。WinRAR的這個功能對壓縮包里有很多文件且文件容量都比較小的情況比較適用。
辦法二: 打開壓縮包(不是解壓,而是用WinRAR打開),選中你要解壓縮的文件,單擊鼠標右鍵,在彈出的菜單里選擇“無需確認直接解壓縮”,快捷鍵是“ALT+W”。用此方法,不管是好的壓縮包還是壞的壓縮包,統(tǒng)統(tǒng)暢行無阻,成功率100%!
辦法三:釜底抽薪法!其原理就是讓RAR壓縮包內損壞的文件解壓縮出來,不理會WinRAR的警告,能解壓多少就解壓多少。解壓縮軟件還是用WinRAR,不過要做小小的設置。

在右鍵點擊解壓縮文件后跳出的窗口里,把“保留被損壞的文件”復選框選中,點擊確定開始解壓縮。不要理會解壓縮出錯的信息,解壓縮結束之后你會發(fā)現(xiàn)損壞的文件被解壓出來了。經(jīng)過這樣解壓出來的損壞文件能正常使用的幾率還是非常高的。
以上幾點,可以使一些破損的文件得到恢復,但也不是百分之百有用的。但大部份還是可以用的。希望以上對大家能有所幫助。

  CRC校驗相關文章:

  CRC校驗原理及推導過程

  crc校驗方法及示例

非常好我支持^.^

(637) 40.1%

不好我反對

(952) 59.9%

( 發(fā)表人:姚遠香 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?