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