ls = input("输入数据:").split()
# ls = "2D 00 03 00 07"
datas = list(ls)
print(datas)
crc16 = 0xffff
poly = 0xa001
for data in datas:
#表示将datas列表中的每一个变量赋值给data
#在此你可以自由输入数值,校验的次数时有你输入的数值的多少决定的。
a = int(data,16) #将data值(16进制)转成10进制
crc16 = a ^ crc16
# ^异或运算,如果两个位为异,则该位结果时1,否则是0.
for i in range(8):
#对于每一个data,都需要右移8次,可以简单理解为对每一位都完成校验
if 1&(crc16) == 1:
#crc16与上1的结果(16位二进制)只有第0位是1或0,其他都是0
#& 与运算:都是1才是1,否则为0
crc16 = crc16 >> 1
#>> 右移,即从高位向低位移动,高位补充0
crc16 = crc16^poly
else:
crc16 = crc16 >> 1
#将10进制转化成16进制
crc16 = hex(int(crc16))
#大写
crc16 = crc16[2:].upper()
print(crc16)
length = len(crc16)
#一些结果以0开头,会自动把0给吞掉,.zfill(2)可以让结果以二进制的形式输出
high = crc16[0:length-2].zfill(2)
high = str(high)
low = crc16[length-2:length].zfill(2)
low = str(low)
print(high, low)
【Python进阶学习】使用python实现crc校验
于 2023-04-10 19:26:01 首次发布