Python 實現CRC校驗計算

2021-10-03 22:19:11 字數 2602 閱讀 7266

class

crc:

"""迴圈冗餘檢驗

parameters

----------

info : list

需要被編碼的資訊

crc_n : int, default: 32

生成多項式的階數

p : list

生成多項式

q : list

crc後得到的商

check_code : list

crc後得到的餘數,即計算得到的校驗碼

code : list

最終的編碼

----------

"""def__init__

(self, info, crc_n=32)

: self.info = info

'''輸入引數:傳送資料位元序列,crc生成多項式階數

'''''' 初始化crc生成多項式p,其中p和二進位製碼(多項式位元序列)的關係為如下例:

g(x)係數: 4 1 0 分別代表x的4次方,x的1次方,x的0次方以此類推

g(x) = 1*(x^4) + 0*(x^3) + 0*(x^2) + 1*x + 1*1

二進位製碼 = 1 0 0 1 1

可根據需要自行新增修改,也可使用國際標準

'''if crc_n ==8:

loc =[8

,2,1

,0]elif crc_n ==32:

loc =[32

,26,23

,22,16

,12,11

,10,8

,7,5

,2,1

,0]# 國際標準crc-32

elif crc_n ==

16:

loc =[16

,15,2

,0]# 國際標準crc-16

elif crc_n ==4:

loc =[4

,3,0

]# 列表解析轉換為多項式位元序列

p =[0

for i in

range

(crc_n +1)

]for i in loc:

p[i]=1

p = p[::

-1]#逆序輸出

info = self.info.copy(

) times =

len(info)

n = crc_n +

1# 左移補零即乘積

for i in

range

(crc_n):0

)# 乘積除以多項式位元序列

q =# 商for i in

range

(times)

:if info[i]==1

:#若乘積位為1,則商1,後逐位異或 1)

for j in

range

(n):

# n即p的位數

info[j + i]

= info[j + i]

^ p[j]

#按位異或

else

:#若乘積位是0,則商0,看下一位0)

# 餘數即為crc編碼

check_code = info[

-crc_n::]

# 生成編碼

code = self.info.copy(

)for i in check_code:

self.crc_n = crc_n

self.p = p

self.q = q

self.check_code = check_code

self.code = code

defprint_format

(self)

:"""格式化輸出結果"""

print

('\t{}'

.format

('傳送資料位元序列:'

, self.info)

)print

('\t{}'

.format

('生成多項式位元序列:'

, self.p)

)print

('\t{}'

.format

('商:'

, self.q)

)print

('\t{}'

.format

('餘數(即crc校驗碼):'

, self.check_code)

)# print('\t{}'.format('帶crc校驗碼的資料位元序列:', self.code))

import numpy as np

m = np.array([1

,1,0

,0,1

,1])

#傳送資料位元序列

m =list

(m)# 轉化為列表型別

CRC 校驗計算

crc即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。其根本思想就是先在要傳送的幀後面附加校驗碼,再傳送給接收端。校驗碼要使所生成的碼能與傳送端和接收端共同選定的某個特定數整除 模2除 到達收端後...

CRC校驗計算

迴圈冗餘校驗 cyclic redundancy check,crc 是一種根據網路資料報或計算機檔案等資料產生簡短固定位數校驗碼的一種通道編碼技術,主要用來檢測或校驗資料傳輸或者儲存後可能出現的錯誤。它是利用除法及餘數的原理來作錯誤偵測的 crc 8 x8 x2 x 1 check crc8 bu...

碼crc校驗 CRC16校驗計算流程

首先再次確認計算步驟 1 預置1個16位的暫存器為十六進製制ffff 即全為1111 1111 1111 1111 稱此暫存器為crc暫存器 2 把第乙個位轉換成8位二進位制資料 既通訊資訊幀的第乙個位元組 與16位的crc暫存器的低8位相異或,把結果放於crc暫存器,高八位資料不變 3 把crc暫...