1 '''******************************************************** 2 Func Name: addZero 3 Para: x : 字符串 4 y : 长度 5 return: x : 处理后的字符串 6 Desc: 将字符串修改为指定长度,不足的补0,只限于加长,不剪短 7 Date: 20190711 8 Auth: yanerfree 9 ********************************************************''' 10 def addZero(x, y): 11 while True: 12 if len(x) < y: 13 x = '0' + x 14 else: 15 break 16 17 return x
1 '''******************************************************** 2 Func Name: hexToInt 3 Para: h:16进制数 4 return: datalen: 10进制数 5 Desc: #将 16进制数 转换为 INT 6 Date: 20190711 7 Auth: yanerfree 8 ********************************************************''' 9 def hexToInt(h): 10 return int(h,16) 11 12 '''******************************************************** 13 Func Name: intToHex 14 Para: n : 10进制数 15 x : 几个字节 16 return: 16进制字符串 17 Desc: 将 16进制数 转换成对应的16进制字符串,并根据字节长度补0,不带0x或者 x 18 Date: 20190711 19 Auth: yanerfree 20 ********************************************************''' 21 def intToHex(n, x): 22 num = hex(n) 23 #print(num) 24 num_list = num.split('0x')[1:]#num_list = num.split('0x')[1] 25 26 return addZero(num_list[0].upper(), x*2) 27 28 '''******************************************************** 29 Func Name: checkValue 30 Para: h : 需要做异或的16进制字符串 31 return: value : 异或结果 32 Desc: 将传入的16进制按2位(8bit) 做异或运算,前2个异或后的结果与下一个异或,一直到结束 33 Date: 20190712 34 Auth: yanerfree 35 ********************************************************''' 36 #将2位的16进制转换成能够用户异或计算的16位数,即'6F'--> 0x6F --> 10进制 37 #16进制转10进制 38 def add0x(s): 39 return eval('0x'+s) 40 41 def checkValue(h): 42 #先取前2组,每组2个做异或运算 43 value = add0x(h[0:2]) ^ add0x(h[2:4])#异或后是10进制数 44 45 for i in range(4, len(h), 2): 46 value = value ^ add0x(h[i:i+2]) 47 #print('异或结果--10进制:',value) 48 #print('异或结果--16进制:',hex(value)) 49 #print('转换成16进制intToHex(value, 1):',intToHex(value, 1)) 50 #value = add0x(intToHex(value, 1)) 51 52 value = intToHex(value, 1)#16进制的校验值,1个字节 53 return value.upper()