crc32函数python_crc校验的python实现
crc(Cyclic Redundancy Check):循环冗余校验,是⼀种常⽤的查错校验码。本质是在要发送的信息后⾯附加⼀个校验码(均为⼆进制序列)。
实现步骤
选择合适的⽣成多项式
将原始信息左移⽣成多项式阶数减⼀位
将左移后的信息与⽣成多项式模⼆相除得到余数,余数即校验码(校验码位数⽐⽣成多项式阶数⼩⼀,⾼位0不能省略)
将检验码附加在原信息后
源代码
类⽂件
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
# 初始化⽣成多项式p
loc = [32, 26, 23, 22, 16, 12, 11, 10, 8, 7, 5, 2, 1, 0]
if crc_n == 8:
loc = [8, 2, 1, 0]
elif crc_n == 16:
loc = [16, 15, 2, 0]
p = [0 for i in range(crc_n + 1)]
for i in loc:
p[i] = 1
info = py()
times = len(info)
n = crc_n + 1
# 左移补零
for i in range(crc_n):
info.append(0)
# 除
q = []
for i in range(times):
if info[i] == 1:
q.append(1)
for j in range(n):
info[j + i] = info[j + i] ^ p[j]
else:
q.append(0)
# 余数
check_code = info[-crc_n::]
# ⽣成编码
code = py()
for i in check_code:
code.append(i)
python格式化输出format
<_n = crc_n
self.p = p
self.q = q
self.check_code = check_code
def print_format(self):
"""格式化输出结果"""
print('{:10}\t{}'.format('信息:', self.info))
print('{:10}\t{}'.format('⽣成多项式:', self.p))
print('{:10}\t{}'.format('商:', self.q))
print('{:10}\t{}'.format('余数:', self.check_code))
print('{:10}\t{}'.format('编码:', de))
测试代码
import numpy as np
# 随机信息
m = np.random.randint(0, 2, 10)
m = list(m)
crc = CRC(m, 32)
crc.print_format()
输出
信息: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0]
⽣成多项式: [1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1]
商: [1, 0, 0, 1, 0, 1, 1, 0, 0, 0]
余数: [1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0]
编码: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。