python小练习4 -- crcmod用于做modbus校验

import crcmod

"""
crcmod.predefined:使用预定义算法的CRC计算。

这个模块提供函数工厂mkPredefinedCrcFun()和一个类,用于使用常见预定义CRC算法计算字节流的CRCs。

除了这个CRC算法是由一个预定义名称指定,而不是各自的多项式,reflection和初始值以及最终的-XOR参数,
这个函数工厂和这个类非常类似于在crcmod中定义的那些。

预定义的CRC算法:
crcmod.predefined模块提供了以下预定义算法:
Polynomial        Reversed?   Init-value XOR-out       Check
0x18005            True         0xFFFF      0x0000     0x4B37
 
mkPredefinedCrcFun() – CRC工厂函数
这个工厂函数提供了一个用于CRC计算的简单接口。
除了它通过名称而不是它的参数指定一种CRC算法,它类似于crcmod.mkCrcFun()

crcmod.predefined.mkPredefinedCrcFun(crc_name)
函数工厂返回一个新函数,用于使用一种指定CRC算法计算CRCs。
参数:
1 crc_name (string) :要使用的预定义CRC算法名称
返回:    CRC计算函数
返回类型:     函数
返回的函数与由crcmod.mkCrcFun()返回的相同:
2 .crc_function(data[, crc=initCrc])
参数:    
data (字节串):用于计算CRC的数据.
crc:初始的crc值
返回:计算的CRC值

返回类型:整数    

3、crcmod.predefined.mkCrcFun(crc_name)
这是对应crcmod.predefined.mkPredefinedCrcFun()的别名。
但使用from crcmod.predefined import *导入crcmod.predefined时,它没有被定义。

Class PredefinedCrc:
这个类从crcmod.Crc类继承,并且对于初始化,它是相同的例外。
它通过名称而非它的参数指定一种CRC算法。

1、class crcmod.predefined.PredefinedCrc(crc_name)
返回一个使用一种指定CRC算法计算CRCs的新Crc对象。
参数与用于工厂函数crcmod.predefined.mkPredefinedCrcFun()的那些参数相同。
参数:    
crc_name (string) – 要使用的预定义CRC算法的名称。T

2、class crcmod.predefined.Crc(poly[, initCrc, rev, xorOut])
这是一个用于crcmod.predefined.PredefinedCrc的别名。但,在使用以下格式from crcmod.predefined import *导入
crcmod.predefined时,它未被定义。
"""

# 测试代码:

if __name__ == "__main__":
    # 测试modbus crc校验函数
    modbus_crc = crcmod.predefined.mkPredefinedCrcFun("modbus")
    print(hex(modbus_crc(b'\x61\x62\x63\x64')))

    print("*" * 20)
    # 测试modbus crc校验类
    modbus_crc_cl = crcmod.predefined.PredefinedCrc("modbus")
    modbus_crc_cl.update(b'\x61\x62\x63\x64')
    print(hex(modbus_crc_cl.crcValue))

    print("*" * 20)

 

你可能感兴趣的:(python,python,开发语言,后端)