19 lines
509 B
Python
19 lines
509 B
Python
CRC_TABLE = (
|
|
0x0000, 0xCC01, 0xD801, 0x1400,
|
|
0xF001, 0x3C00, 0x2800, 0xE401,
|
|
0xA001, 0x6C00, 0x7800, 0xB401,
|
|
0x5000, 0x9C01, 0x8801, 0x4400,
|
|
)
|
|
|
|
|
|
def fit_crc(data: bytes | bytearray | memoryview) -> int:
|
|
crc = 0
|
|
for byte in data:
|
|
tmp = CRC_TABLE[crc & 0xF]
|
|
crc = (crc >> 4) & 0x0FFF
|
|
crc ^= tmp ^ CRC_TABLE[byte & 0xF]
|
|
tmp = CRC_TABLE[crc & 0xF]
|
|
crc = (crc >> 4) & 0x0FFF
|
|
crc ^= tmp ^ CRC_TABLE[(byte >> 4) & 0xF]
|
|
return crc & 0xFFFF
|