业余 python 编码记录
实现 crc 数据校验功能
主要记录日常用到的函数实现基本功能
输入数组:dara = [0x01, 0x46, 0x00,0x00 ,0x00 ,0x01 ,0x02 ,0x00 ,0x00]
输出数组:data = [0x01, 0x46, 0x00,0x00 ,0x00 ,0x01 ,0x02 ,0x00 ,0x00 ,0x23 ,0x46]
其中,0x23
和 0x46
是校验位
函数实现:
def crc16Cal(datas):
crc16=0xFFFF
poly=0xA001
for data in datas:
#a=int(data,16) 若输入是字符形式,则用这个方式转为 int 类型
#print(a)
crc16 = data ^ crc16
for i in range(8):
if (crc16 & 1) == 1 :
crc16 = crc16 >> 1
crc16 = crc16 ^ poly
else :
crc16 = crc16 >> 1
crc16=hex(int(crc16)) # 转化为 16进制显示
#crc16=crc16[2:].upper() # 去掉 0x
return crc16
函数测试:
print("test python")
datas= [0x01, 0x46, 0x00,0x00 ,0x00 ,0x01 ,0x02 ,0x00 ,0x00]
print("input arry")
for i in datas :
print(hex(i))
a = crc16Cal(datas) & 0x00ff
b = crc16Cal(datas) >> 8
datas.append(a) # 向数组中追加元素
datas.append(b)
print("output arry")
for i in datas :
print(hex(i))
datas.pop() # 将数组中的最后两个新加的元素 pop 出来,否则数组会原来越长
datas.pop()