# - * - 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;
'' '