TG-PlatformPlus/UserScripts/CRC.py

55 lines
1.6 KiB
Python
Raw Normal View History

2026-03-02 14:29:58 +08:00
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