本文目錄一覽:
- 1、這個CRC編碼怎麼算啊
- 2、你好,求教crc校驗
- 3、python求crc32的值
- 4、用查表發實現crc16校驗怎麼實現
- 5、用python語言 如何將test1.txt中一串數字進行crc校驗存入test2.txt中
這個CRC編碼怎麼算啊
2018年01月07日,星期日,
不好意思,今天剛看到,
我先大概說一下CRC相關概念,然後咱們開始解題,
1、多項式形式與二進位形式是有關聯的,因子是對應的,
比如,題中,發送多項式為:X^11+X^8+X^7+X^6+X^4+X^3+X^2+1,
就是:2^11+2^8+2^7+2^6+2^4+2^3+2^2+1,
所以,對應的二進位形式為:100111011101,
這裡的發送多項式說的就是,未經CRC校驗運算的原始數據,
2、同理,CRC生成多項式也與一組二進位數相對應,
例如,題中,CRC生成多項式為:x^4+x^2+x^1+1,
就是:2^4+2^2+2^1+1,
對應的二進位是:10111,
生成多項式是人為指定的,沒有固定值,指定成x^4+x^3+x^2+x^1+1即11111也行,
3、發送多項式的二進位形式是:100111011101,這是我們的原始數據,
CRC生成多項式的二進位形式是:10111,我們要使用它來按照CRC規則與原始數據進行運算後,得出我們要在線路上傳輸的,經過CRC校驗的,原始數據的CRC編碼,
這裡比較繞,簡單點理解就是,我們要通過給出的CRC生成多項式,用它與原始數據進行計算後,得到的帶有CRC校驗的一串二進位數,我們把這串帶有CRC校驗的二進位就稱為原始數據的CRC編碼,就是題目中的「該發送多項式的CRC編碼」,
4、接下來就是CRC計算規則了,
發送多項式的二進位形式,向左移動(CRC生成多項式最高次冪的指數)這麼些位,本題CRC生成多項式最高次冪是X^4,因此,發送多項式要左移4位,
計算如下:
100111011101 * 2^4
=100111011101 0000,
這樣經過計算後,原始數據的右側多出了4個0,也就是多出了4個空位,在將來通過計算得出的CRC校驗碼就要放到這4個空位中,4位的CRC校驗碼就要填充到這挪出的4個車位,
按CRC規則,使用變形後的發送多項式的二進位形式:1001110111010000去除以CRC生成多項式的二進位形式:10111,
請注意,這裡使用的除法,不是數學領域的除法,而是指計算機中的模二除的計算方式,實際上就是異或運算,實際的操作方法是,將兩個數高位對齊也就是左對齊,然後按位異或,若相同則結果為0,若不同則結果為1,然後將得到的數再與除數(就是生成多項式)相除,直到最後得到最終的餘數,一般來說,我們按照CRC校驗規則經過運算,一般是除不盡的,這個餘數就是我們需要的CRC校驗碼,將這個CRC校驗碼按照CRC規則與變形後(也就是右邊加了4個零的原始數據)的原始數據組合到一起就是最終的答案,
計算步驟如下:
1001110111010000/10111
…………………………………………
1001110111010000 被除數 ,變形後的原始數據,
10111 除數 ,CRC生成多項式
—————————
0010010111010000 商,下一步繼續除以CRC生成多項式:10111
…………………………………………
10010111010000 被除數,就是上一步運算得到的,商,
10111 除數
————————
00101111010000 商,下一步繼續除以CRC生成多項式:10111
……………………………………………
101111010000 被除數,即上一步得到的商
10111 除數
———————
000001010000 商
………………………………………………
1010000 被除數
10111 除數
———
0001100 餘數(也是最後一步運算得到的商,因為位數不足5位不能再繼續除了,4位 的1100不能再與5位的CRC生成多項式 10111,進行模二除的運算了,所以就把這個商稱為餘數了,)
按照CRC校驗運算規則,將經過上一步運算後得到的CRC校驗碼:1100,與變形後的原始數據:1001110111010000,組合到一起,就是我們最終需要的,在線路上傳送的,帶有CRC校驗碼的,CRC編碼,也就是題目中說的,該發送多項式的CRC編碼,
計算過程如下:
1001110111010000+1100
………………………………………………
100111011101 0000
+ 1100
——————————
100111011101 1100
這裡需要說明的是,只有理解了CRC編碼的規則,才能在將來遇到此類問題時從容應對,我給你的建議是,多做題,最好是有正確答案的題目,這樣在做題的過程中,會加深你對CRC編碼的理解,
最後,我們再來複習一下,CRC編碼的規則,
1、原始數據多項式,我們一般稱為:C(X),也有稱為m(x)的,
2、生成多項式 generator polynomial,我們一般稱為:G(x)。
3、CRC校驗碼,我們一般稱為: r(x),
4、我們,先用變形後的C(X),去除以G(x),得到r(x),然後,再將變形後的C(X),與r(x)組合,就得到了最終我們需要的帶CRC校驗的CRC編碼。
這裡想再說一下,為什麼生成多項式的最高次冪是幾,最後的餘數就是幾位的,
比如本例中,生成多項式為:x^4+x^2+x^1+1,最後的餘數就是4位的1100,
這個規則是可以推導出來的,
首先,將生成多項式中的 1 改寫成 x^0,則有 x^4+x^2+x^1+x^0,
這就很明顯可以看出來,指數是從0開始的,雖然中間有一個指數3因為該權位上的值為0而沒有寫在這個生成多項式中,但是在該生成多項式的二進位形式中該權位上是數字0,這不是重點,
重點是,我們可以一目了然的看出來,指數是從0開始的,而不是從1開始的,所以,以本題為例,當生成多項式的最高次冪為x^4即指數為4時,該冪所在的權位的右側一定有4位二進位數,因為該冪的權位決定了這個生成多項式一定是一個5位的二進位數,而最高冪所在的權位是右數第五個位置,所以它的右邊一定還有4個二進位位,
結合開頭描述的,要讓原始值去乘,2的,生成多項式的最高次冪這麼多次方,也就是讓原始值向左移動多少位,好騰出地方放置餘數,
還有一個很巧妙的地方是,因為生成多項式的二進位形式中,最高位一定是1,所以,和加了0的原始值進行異或運算,到最後得到的餘數的位數一定比生成多項式的二進位形式的位數小,拿本例來說,生成多項式是:
x^4+x^2+x^1+1
對應的二進位形式是:
10111
所以,不管原值最後剩下什麼組合,只要和 10111左對齊後,因為要進行異或的操作,最高位一定變0,所以,最後的餘數的二進位位數一定小於生成多項式的二進位位數,
再結合,指數從0開始,
所以,生成多項式的最高次冪,可以決定餘數的位數,
你好,求教crc校驗
CRC即循環冗餘校驗碼(Cyclic Redundancy Check[1] ):是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息欄位和校驗欄位的長度可以任意選定。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的演算法,以保證數據傳輸的正確性和完整性。
工作原理
循環冗餘校驗碼(CRC)的基本原理是:在K位信息碼後再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼也叫(N,K)碼。對於一個給定的(N,K)碼,可以證明存在一個最高次冪為N-K=R的多項式G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。 校驗碼的具體生成過程為:假設要發送的信息用多項式C(X)表示,將C(x)左移R位(可表示成C(x)*2R),這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。用 C(x)*2R 除以生成多項式G(x)得到的餘數就是校驗碼。
任意一個由二進位位串組成的代碼都可以和一個係數僅為『0』和『1』取值的多項式一一對應。例如:代碼1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的代碼101111。
python求crc32的值
本文實例講述了python求crc32值的方法。分享給大家供大家參考。具體實現方法如下:
要想求CRC值,前面要import binascii
binascii.crc32(v) 求出了v的crc32值,這是一個long型,形如-1456387L,把這個值0xffffffff得到的值形如48a213L的形式。
然後把這個值用16進位表示出來、
具體代碼如下:
def _crc32(self, v):
“””
Generates the crc32 hash of the v.
@return: str, the str value for the crc32 of the v
“””
return ‘0x%x’ % (binascii.crc32(v) 0xffffffff) #取crc32的八位數據 %x返回16進位
用查表發實現crc16校驗怎麼實現
1)將上次計算出的CRC校驗碼右移一個位元組;
(2)將移出的這個位元組與新的要校驗的位元組進行XOR 運算;
(3)用運算出的值在預先生成碼錶中進行索引,獲取對應的值(稱為余式);
(4)用獲取的值與第(1)步右移後的值進行XOR 運算;
(5)如果要校驗的數據已經處理完,則第(4)步的結果就是最終的CRC校驗碼。如果還有數據 要進行處理,則再轉到第(1)步運行。
CRC32=CRC_32_Tbl[(CRC32^((unsigned__int8*)p)[i])0xff]^(CRC328);
怎麼樣?簡單吧。
用python語言 如何將test1.txt中一串數字進行crc校驗存入test2.txt中
給你寫幾個。這個本來很簡單的。
import binascii
import struct,ctypes
fp1=open(‘test1.txt’,’rb’)
fp2=open(‘test2.txt’,’wb’)
c=fp1.read(1)
crc = binascii.crc32(c)
while True:
fp2.write(c)
c=fp1.read(1)
if not c:break
crc = binascii.crc32(” world”, crc) 0xffffffff
fp2.write(struct.pack(‘l’crc))
fp2.close()
fp1.close()沒有驗證過是否正確,僅供參考。
原創文章,作者:WHGSY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130349.html