日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CRC校验算法学习

發(fā)布時(shí)間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CRC校验算法学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
CRC校驗(yàn)算法學(xué)習(xí)

?

原文:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html

本文根據(jù)上述鏈接原文翻譯而來,如有錯(cuò)誤,忘廣大網(wǎng)友互相幫忙糾正,謝謝!

?

1、前言:

1.0 作者

  • 作者:Ross N. Williams
  • 電子郵件ross@guest.adelaide.edu.au
  • 日期:1993年8月19日
  • 版本:3

1.1 代碼示例

crcmodel.h? crctable.c crcmodel.c

?

1.2 摘要

?

2、簡(jiǎn)介:錯(cuò)誤校驗(yàn)

錯(cuò)誤校驗(yàn)的目的是通過檢驗(yàn)傳輸信號(hào)中的噪音干擾(出錯(cuò)的源頭),以檢驗(yàn)傳輸數(shù)據(jù)是否出錯(cuò)。

為此,從有效的數(shù)據(jù)構(gòu)建一個(gè)校驗(yàn)值(稱之為校驗(yàn)和),包含在傳輸數(shù)據(jù)流中,作為檢驗(yàn)數(shù)據(jù)是否完備。

接收方使用同樣的計(jì)算方法對(duì)信息數(shù)據(jù)進(jìn)行求校驗(yàn)值,和數(shù)據(jù)中的校驗(yàn)值比較,以確定數(shù)據(jù)是否正確無誤。

?

例如,我們通過將信息數(shù)據(jù)采用和校驗(yàn)方法(33 =(6+23+4)%256),對(duì)下列數(shù)據(jù)進(jìn)行校驗(yàn)?:

  原始信息數(shù)據(jù):6, 23, 4

  帶校驗(yàn)和的數(shù)據(jù):6, 23, 4, 33

  實(shí)際接收的數(shù)據(jù):6, 27, 4, 33

我們將接收的數(shù)據(jù) { 6, 27, 4 } 進(jìn)行和校驗(yàn)((6+27+4)%256 = 37),結(jié)果與接收的校驗(yàn)碼 33 進(jìn)行比較,校驗(yàn)碼不一致,說明接收的數(shù)據(jù)出錯(cuò)已經(jīng)損壞。

還有一種更危險(xiǎn)的情況就是,當(dāng)信息數(shù)據(jù)和校驗(yàn)數(shù)據(jù)同時(shí)被損壞,而導(dǎo)致校驗(yàn)一致的情況。這種情況不可避免,最有效的辦法就是增加校驗(yàn)和中的信息量(例如將一個(gè)字節(jié)校驗(yàn)增加到兩個(gè)),來減小這種情況發(fā)生的概率。

?

存在其它的錯(cuò)誤校驗(yàn)計(jì)時(shí),這些技術(shù)對(duì)信息數(shù)據(jù)進(jìn)行比較復(fù)雜的轉(zhuǎn)換,從而注入更多的冗余信息,

本文僅僅介紹?CRC 校驗(yàn)算法,它屬于錯(cuò)誤校驗(yàn)算法的一種類型。

CRC校驗(yàn)通過在數(shù)據(jù)末尾附加校驗(yàn)碼的形式保證數(shù)據(jù)的完整性。

?

3.復(fù)雜性的需要

在上一節(jié)和校驗(yàn)示例中,我們通過和校驗(yàn)的方法檢測(cè)數(shù)據(jù)損壞,通過求和再求模256的形式求得校驗(yàn)碼。

  原始信息數(shù)據(jù):6, 23, 4

  帶校驗(yàn)和的數(shù)據(jù):6, 23, 4, 33

  實(shí)際接收的數(shù)據(jù):6, 27, 4, 33

和校驗(yàn)的的這種方法太過于簡(jiǎn)單,如果信號(hào)數(shù)據(jù)出錯(cuò),我們?nèi)匀挥?/256概率檢測(cè)不到錯(cuò)誤,例如:

  原始信息數(shù)據(jù):6, 23, 4

  帶校驗(yàn)和的數(shù)據(jù):6, 23, 4, 33

  實(shí)際接收的數(shù)據(jù):8, 20, 5, 33

為了加強(qiáng)校驗(yàn)和,我們把校驗(yàn)碼從一個(gè)8bit寄存器擴(kuò)展到16bit寄存器(即 65536,而非 mod 256),從而明顯將出錯(cuò)概率由 1/256 降低至 1/65536。

擴(kuò)充校驗(yàn)碼位數(shù)雖然這是個(gè)好辦法,單這種方法是比較失敗的,因?yàn)樗褂玫挠?jì)算方法不夠“隨機(jī)”。

簡(jiǎn)單的求和校驗(yàn)方法,使得每個(gè)字節(jié)的數(shù)據(jù)都可以影響到校驗(yàn)碼對(duì)應(yīng)字節(jié)的結(jié)果,與擴(kuò)充校驗(yàn)碼數(shù)據(jù)位數(shù)無關(guān)。?

只有使用更加復(fù)雜算法替換簡(jiǎn)單求和算法,才能減小每個(gè)信息數(shù)據(jù)對(duì)校驗(yàn)碼的影響,才能解決這個(gè)問題。

?

總結(jié)下,我們看到需要下面兩個(gè)方面才能形成比較強(qiáng)的校驗(yàn)函數(shù):

  數(shù)據(jù)寬度:寬的數(shù)據(jù)寬度可以保證更低的出錯(cuò)概率,例如32bit數(shù)據(jù)給出 1/2^32 的出錯(cuò)概率機(jī)會(huì)。

  混亂隨機(jī):使得每個(gè)輸入字節(jié)具備改變校驗(yàn)碼寄存器任意位數(shù)的可能性。?

?

注意:術(shù)語?"checksum" ,即校驗(yàn)和,早期用來描述邱丹求和公式,單現(xiàn)在包含更廣泛含義,包含更復(fù)雜的算法,如 CRC算法 。

?

4. CRC 算法的基本思想

構(gòu)建復(fù)雜的校驗(yàn)碼計(jì)算方法有很多種方式。

我們看到使用加法的“校驗(yàn)和”算法不夠強(qiáng)大,無法形成有效的校驗(yàn)碼。

但研究結(jié)果表明使用除法可以,要使用和校驗(yàn)碼寄存器一樣寬的大除數(shù)就可以。

?

CRC算法的基本思想是把 信息數(shù)據(jù)當(dāng)做一個(gè)很大的二進(jìn)制數(shù)來處理,用它除以一個(gè)固定的二進(jìn)制數(shù),并將這個(gè)除法的余數(shù)作為校驗(yàn)碼。

接收到信息數(shù)據(jù)后,接收方執(zhí)行相同的除法,并將 余數(shù) 與 校驗(yàn)碼 進(jìn)行比較來驗(yàn)證信息數(shù)據(jù)是否完整。

?

例如:

假定信息數(shù)據(jù)包含2個(gè)字節(jié){ 6, 23 } , 則可以認(rèn)為是二進(jìn)制數(shù) 0000-0110-0001-0111。

假設(shè)使用1個(gè)字節(jié)校驗(yàn)寬度,使用常數(shù)除數(shù)位 1001,則校驗(yàn)碼為的余數(shù)?0000-0110-0001-0111 除以1001。

我們用所學(xué)過的除法就可以求得余數(shù)。計(jì)算過程如下

...0000010101101 = 00AD = 173 = 商____-___-___-___- 9= 1001 ) 0000011000010111 = 0617 = 1559 = 除數(shù) 被除數(shù) 0000.,,....,.,,,----.,,....,.,,,0000,,....,.,,,0000,,....,.,,,----,,....,.,,,0001,....,.,,,0000,....,.,,,----,....,.,,,0011....,.,,,0000....,.,,,----....,.,,,0110...,.,,,0000...,.,,,----...,.,,,1100..,.,,,1001..,.,,,====..,.,,,0110.,.,,,0000.,.,,,----.,.,,,1100,.,,,1001,.,,,====,.,,,0111.,,,0000.,,,----.,,,1110,,,1001,,,====,,,1011,,1001,,====,,0101,0000,----10111001====0010 = 02 = 2 = 余數(shù)

?

十進(jìn)制中,1559 除以 9 等于 173 余 2

雖然在信息數(shù)據(jù)中,每一位的變化對(duì)商的影響微乎其微,但對(duì)余數(shù)的變化確實(shí)顯而易見的。

?

5. 多項(xiàng)式算法

上一節(jié)介紹的類似?信息數(shù)據(jù)除以大除數(shù)得余數(shù)的方法,我們稱之為 CRC算法思想。

CRC算法在計(jì)算機(jī)中實(shí)現(xiàn)實(shí)際上更加神秘,我們需要用一些更抽象的數(shù)學(xué)符號(hào)來理解它。

?

在處理CRC算法時(shí)候,我們常聽到“多項(xiàng)式”一詞。一個(gè)給定的CRC算法將使用一個(gè)特定的"多項(xiàng)式"。

一般來說,CRC算法是用“多項(xiàng)式”運(yùn)算來操作的,除數(shù)、被除數(shù)、商、余數(shù),它們都可以被看做具有二元系數(shù)的多項(xiàng)式。。

這是什么意思,怎么理解???

被處理的每個(gè)數(shù)據(jù)都可以看做一個(gè)字符串,它對(duì)應(yīng)的每個(gè)位作為多項(xiàng)式系數(shù)。

例如數(shù)字 23(十進(jìn)制),可以看做 17(十六進(jìn)制)和 10111(二進(jìn)制)

10111 ,它對(duì)應(yīng)于多項(xiàng)式: ?1*x^4 + 0*x^3 + 1*x^2 + 1*x^1 + 1*x^0

化簡(jiǎn)成更簡(jiǎn)單的形式為:? x^4 + x^2 + x^1 + x^0

?

利用這樣抽象的方法,我們可以把要處理的 信息數(shù)據(jù),除數(shù) 都看出是多項(xiàng)式。我們所做的算法和上面一樣,只是里面多了很多?x 。

?

假設(shè)我們想 1011 乘以 1101,我們用多項(xiàng)式的表示方法可以表示為

  ( x^3 + x^1 + x^0 )*( x^3 + x^2 + x^0 )

  =(x^6 + x^4 + x^3+ x^5 + x^3 + x^2+ x^3 + x^1 + x^0)

  =?x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0

計(jì)算到此時(shí)候,為了化簡(jiǎn)得到最簡(jiǎn),我們必須要假定 x = 2,來化簡(jiǎn) 3*x^3 得到結(jié)果:

  x^7 + x^3 + x^2 + x^1 + x^0

?

As Knuth [Knuth81] says (p.400):

"The reader should note the similarity between polynomial arithmetic and multiple-precision arithmetic (Section 4.3.1), where the radix b is substituted for x. The chief difference is that the coefficient u_k of x^k in polynomial arithmetic bears little or no relation to its neighboring coefficients x^{k-1} [and x^{k+1}], so the idea of "carrying" from one place to another is absent. In fact polynomial arithmetic modulo b is essentially identical to multiple precision arithmetic with radix b, except that all carries are suppressed."

Thus polynomical arithmetic mod 2 is just binary arithmetic mod 2 with no carries. While polynomials provide useful mathematical machinery in more analytical approaches to CRC and error-correction algorithms, for the purposes of exposition they provide no extra insight and some encumbrance and have been discarded in the remainder of this document in favour of direct manipulation of the arithmetical system with which they are isomorphic: binary arithmetic with no carry.

?

能力水平有限,最后這么一大段木有翻譯 !_! , Help!

?

posted on 2017-07-09 15:21 aiyauto 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/aiyauto/p/7141290.html

總結(jié)

以上是生活随笔為你收集整理的CRC校验算法学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。