Python dos métodos crc16

# - * - codificación: utf-8 - * -
#! / usr / bin / env python3
import crcmod.predefined

clase crc16:
    def __init __ (self):
        pass

    def crc16Modbus (self, bytes_data, start_pos, stop_pos, invert = False):
        a = 0xFFFF
        b = 0xA001
        para i en rango (start_pos, stop_pos):
            a ^ = bytes_data [i]
            para j en rango (8):
                último = a % 2
                a >> = 1
                si último == 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 = modusc_crc_fun (datos)
        return (res << 8 y 0xff00) | res >> 8 if invert == False else res
    
    def crc16Xmodem (self, bytes_data, start_pos, stop_pos, invert = False):
        wcrc = 0
        para i en rango (start_pos, stop_pos):
            data = bytes_data [i]
            para j en rango (8):
                treat = data & 0x80
                data << = 1
                bcrc = (wcrc >> 8) & 0x80
                wcrc << = 1
                wcrc = wcrc & 0xffff
                if (treat! = Bcrc):
                    wcrc ^ = 0x1021
        return wcrc si invertido == Falso 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 (datos)
        return else if invertido (res << 8 y 0xff00) | res >> 8

# tipo de depuración: archivo singel 
# nombre de archivo: mycrc16.py
# versión de archivo: v0.0
# hora de depuración: 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', codificación = 'utf8'), 0, 9)))
    print (hex (crc16_test.crc16Xmodem2 (bytes ('123456789', codificación = 'utf8'), 0, 9)))

'' '
Nota:
    Parámetros de
    entrada de descripción del parámetro: bytes_data para ser verificado byte string data,
           start_pos posición de inicio de
           los datos de verificación stop_pos posición final de los datos de verificación
           invert = False El resultado de la verificación se establece por defecto en el byte bajo primero, si invert = Verdadero entonces El alto byte es el primer
    parámetro:     crc16Modbus para
        generar el resultado de verificación de 2 bytes
        
se implementa por sí mismo, crc16Modbus2 se implementa llamando a la biblioteca;
    crc16Xmodem2 se implementa por sí mismo y crc16Xmodem2 se implementa llamando a la biblioteca;
'' '
 

 

Supongo que te gusta

Origin blog.csdn.net/qq_34473570/article/details/108370358
Recomendado
Clasificación