TG-PlatformPlus/UserScripts/CRC.py

55 lines
1.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

def cal_crc8(data):
'''
计算1字节数据的CRC8
'''
crc = data
poly = 0x31 #0x07 # 多项式x^8 + x^2 + x^1 + 1即0x107根据原理省略了最高位1而得0x07
for i in range(8,0,-1):
if ((crc & 0x80) >> 7) == 1: # 判断最高位是否为1如果是需要异或否则仅左移
crc = (crc << 1) ^ poly
else:
crc = (crc << 1)
return crc & 0xFF # 计算后需要进行截取
def crc8(datas):
'''
计算数据的CRC8校验码
'''
length = len(datas)
crc = 0x00
for i in range(length):
if i == 0:
crc = cal_crc8(datas[0]) # 先计算第1个数据的CRC8
else:
crc = (crc ^ datas[i]) & 0xFF # 其余的均将上次的CRC8结果与本次数据异或
crc = cal_crc8(crc) # 再计算CRC8
return crc & 0xFF
def crc16(datas):
crc = 0xFFFF
for pos in datas:
crc ^= pos
for i in range(8):
if((crc & 1) != 0):
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
# return ((crc & 0xff) << 8) + (crc >> 8)
return crc
def add8(datas):
crc = 0x00
for data in datas:
crc = crc + data
return crc&0xFF
def checkValue_Tbus(data: bytes) -> int:
crc = 0xFFFF
length = len(data)
if length % 2 != 0:
return 0
for i in range(0, length, 2):
val = data[i] * 256 + data[i + 1]
crc = crc ^ val
return crc