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()