python 实现CRC(循环冗余)校验

本文深入探讨了循环冗余校验码(CRC)的基本原理及其在数据校验中的应用,尤其关注CRC-16/MODBUS的具体实现。通过对比奇偶校验码和海明校验码,阐述了CRC的检错和纠错优势。并提供了Python代码示例,展示了如何使用CRC-16/MODBUS进行数据完整性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码常用于外存储器和计算机同步通信的数据校验。奇偶校验码和海明校验码都是采用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关系的。
  • 这里我用CRC-16/MODBUS作为例子,多项式 POLY(Hex):8005,初始值INIT(Hex):FFFF,结果异或值XOROUT(Hex):0000,具体代码如下:
#多项式 POLY(Hex):8005,初始值 INIT(Hex):FFFF,结果异或值 XOROUT(Hex):0000
def crc16Add(read):
	crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xFFFF, xorOut=0x0000)
	data = read.replace(" ", "")
	readcrcout = hex(crc16(unhexlify(data))).upper()
	str_list = list(readcrcout)
	if len(str_list) == 5:
	    str_list.insert(2, '0')  # 位数不足补0
	crc_data = "".join(str_list)
	crc_data = int(crc_data[2:],16)
	crc_data = "%04x" % crc_data
	read = read.strip() + crc_data
	print('增加Modbus_CRC16校验:>>>', read)
	return read
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值