Pythonの2つのcrc16メソッド

#-*-コーディング:utf-8-*-
#!/ usr / bin / env python3
import crcmod.predefined

クラスcrc16:
    def __init __(self):
        pass

    def crc16Modbus(self、bytes_data、start_pos、stop_pos、invert = False):
        a = 0xFFFF
        b = 0xA001
        for i in range(start_pos、stop_pos):
            a ^ = bytes_data [i]
            for j in range(8):
                last = a %2
                a >> = 1
                if last == 1:
                    a ^ = b
        return(a << 8&0xff00)| a >> 8 if invert == False else a
    
    def crc16Modbus2(self、bytes_data、start_pos、stop_pos、invert = False):
        data = bytes_data [start_pos:stop_pos]
        modus_crc_func = crcmod.predefined.mkCrcFun( 'modbus')
        res = modus_crc_func (データ)
        リターン(res << 8&0xff00)| res >> 8 if invert == False else res
    
    def crc16Xmodem(self、bytes_data、start_pos、stop_pos、invert = False):
        wcrc = 0
        for i in range(start_pos、stop_pos):
            data = bytes_data [i]
            for j in range (8):
                treat = data&0x80
                data << = 1
                bcrc =(wcrc >> 8)&0x80
                wcrc << = 1
                wcrc = wcrc&0xffff
                if(treat!= bcrc):
                    wcrc ^ = 0x1021
        return wcrc if invert == False else(wcrc << 8&0xff00)| wcrc >> 8

    def crc16Xmodem2(self、bytes_data、start_pos、stop_pos、invert = False):
        data = bytes_data [start_pos:stop_pos]
        xmodem_crc_func = crcmod.predefined.mkCrcFun( 'xmodem')
        res = xmodem_crc_func(data)
        return res if invert = = (res << 8&0xff00)| res >> 8

#デバッグタイプ:singel file 
#ファイル名:mycrc16.py
#ファイルバージョン:v0.0
#デバッグ時間:2020.8.26
if __name__ == '
    __ main __ ':crc16_test = crc16()
    print(hex(crc16_test.crc16Modbus(bytes( '123456789'、encoding = 'utf8')、
    0、9 )))print(hex(crc16_test.crc16Modbus2(bytes( '123456789'、encoding = 'utf8')、
    0、9 )))print(hex(crc16_test。 crc16Xmodem(bytes( '123456789'、encoding = 'utf8')、
    0、9 )))print(hex(crc16_test.crc16Xmodem2(bytes( '123456789'、encoding = 'utf8')、0、9)))

'' '
注:
    パラメーターの説明
    入力パラメーター:検証対象のbytes_dataバイト文字列データ、
           start_pos
           検証データの開始位置stop_pos検証データの終了位置
           invert = False検証結果は、デフォルトで最初に下位バイトになります。invert = Trueの場合は、上位になります。バイトは最初の
    パラメータです:
        2バイトのチェック結果
        
    を出力するcrc16Modbusはそれ自体で実装され、crc16Modbus2はライブラリを呼び出すことによって実装されます;
    crc16Xmodem2はそれ自体で実装され、crc16Xmodem2はライブラリを呼び出すことによって実装されます;
'' '
 

 

おすすめ

転載: blog.csdn.net/qq_34473570/article/details/108370358