美文网首页
python3 crc8校验-3步实现计算

python3 crc8校验-3步实现计算

作者: uniqueway | 来源:发表于2017-12-20 00:35 被阅读0次

最近项目中用到了跟硬件通信的crc8校验,花了点时间研究了一下python的crc8校验,但是一直没有找到好的技术突破。

google了一番,昨天测试了网上的几种方法都不正确,确定了使用crcmod库来实现,参考官方文档和国内的一遍文章,具体如下:

http://crcmod.sourceforge.net/crcmod.predefined.html#class-predefinedcrc

http://blog.csdn.net/snoop_lttx/article/details/53674657

其实python3 只需要3步即可实现crc8校验,官方有crc8,但是默认是crc-8不是我要找的crc-8-maxim,而crcmod库是支持多种crc8计算的。


crcmod库支持多种crc8计算

下面我是采用crc-8-maxim算法的,多项式:x8+x5+x4+1(二进制为100110001),0x31

两种方法实现--3步计算crc8校验和


import crcmod.predefined

crc8 = crcmod.predefined.Crc('crc-8-maxim')

crc8.update(bytes().fromhex('011200'))

print(hex(crc8.crcValue))

#方法二

crc8_func = crcmod.predefined.mkCrcFun('crc-8-maxim')

crc8_func_value = crc8_func(bytes().fromhex('011200'))

print(hex(crc8_func_value))

正确运行结果为:0xd6


console运行结果

验证crc8校验和

下面我们使用在线crc校验工具测试一下:
http://www.ip33.com/crc.html
测试截图如下:

在线测试计算结果

到此我们完成了crc8校验和。

技巧总结

其中我们用到了一个很关键的一步转换-16进制字符串转16进制字节

目前有三种方式实现转换:

# 第一种
bytes().fromhex('011200')
# 第二种  需要import binascii
binascii.a2b_hex(('011200')
# 第三种 需要import binascii
binascii.unhexlify(('011200')

关于crc8的理论,本文不再赘述了。可以参考以下文章:
http://blog.csdn.net/haifengid/article/details/51753181

相关文章

网友评论

      本文标题:python3 crc8校验-3步实现计算

      本文链接:https://www.haomeiwen.com/subject/fvjwwxtx.html