47 lines
1.3 KiB
Plaintext
47 lines
1.3 KiB
Plaintext
|
|
def check_value(data: bytes) -> int:
|
|||
|
|
# 初始化crc为0xFFFF
|
|||
|
|
crc = 0xFFFF
|
|||
|
|
|
|||
|
|
# 循环处理每个数据字节
|
|||
|
|
for byte in data:
|
|||
|
|
# 将每个数据字节与crc进行异或操作
|
|||
|
|
crc ^= byte
|
|||
|
|
|
|||
|
|
# 对crc的每一位进行处理
|
|||
|
|
for _ in range(8):
|
|||
|
|
# 如果最低位为1,则右移一位并执行异或0xA001操作(即0x8005按位颠倒后的结果)
|
|||
|
|
if crc & 0x0001:
|
|||
|
|
crc = (crc >> 1) ^ 0xA001
|
|||
|
|
# 如果最低位为0,则仅将crc右移一位
|
|||
|
|
else:
|
|||
|
|
crc = crc >> 1
|
|||
|
|
|
|||
|
|
# 返回最终的crc值
|
|||
|
|
return crc
|
|||
|
|
|
|||
|
|
def check(data: bytes) -> int:
|
|||
|
|
if len(data) < 2:
|
|||
|
|
return False
|
|||
|
|
# 初始化crc为0xFFFF
|
|||
|
|
crc = 0xFFFF
|
|||
|
|
|
|||
|
|
# 循环处理每个数据字节
|
|||
|
|
for byte in data:
|
|||
|
|
# 将每个数据字节与crc进行异或操作
|
|||
|
|
crc ^= byte
|
|||
|
|
|
|||
|
|
# 对crc的每一位进行处理
|
|||
|
|
for _ in range(8):
|
|||
|
|
# 如果最低位为1,则右移一位并执行异或0xA001操作(即0x8005按位颠倒后的结果)
|
|||
|
|
if crc & 0x0001:
|
|||
|
|
crc = (crc >> 1) ^ 0xA001
|
|||
|
|
# 如果最低位为0,则仅将crc右移一位
|
|||
|
|
else:
|
|||
|
|
crc = crc >> 1
|
|||
|
|
|
|||
|
|
# 返回最终的crc值
|
|||
|
|
if crc == 0 :
|
|||
|
|
return True
|
|||
|
|
return False
|
|||
|
|
|