python 計算異或


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM