Python 实现方法
def calc_crc(string):
data = bytearray.fromhex(string)
crc = 0xFFFF
for pos in data:
crc ^= pos
for i in range(8):
if (crc & 1) != 0:
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
hex_crc = hex(((crc & 0xff) << 8) + (crc >> 8)) # 返回十六进制
crc_0 = crc & 0xff
crc_1 = crc >> 8
str_crc_0 = '{:02x}'.format(crc_0).upper()
str_crc_1 = '{:02x}'.format(crc_1).upper()
return str_crc_0, str_crc_1 # 返回两部分十六进制字符
测试结果
sd = '00 41 10 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
crc = calc_crc(sd.replace(' ', ''))
print(crc)
# ('C4', '2A')
sd = '01 10 04 44 00 02'
crc = calc_crc(sd.replace(' ', ''))
print(crc)
# ('00', 'ED')
CRC在线测试
【http://www.ip33.com/crc.html】
链接: CRC在线测试
测试结果: