熱線電話:13121318867

登錄
首頁精彩閱讀Python實現將16進制字符串轉化為ascii字符的方法分析
Python實現將16進制字符串轉化為ascii字符的方法分析
2018-04-11
收藏

Python實現將16進制字符串轉化為ascii字符的方法分析

本文實例講述了Python實現將16進制字符串轉化為ascii字符的方法。分享給大家供大家參考,具體如下:
字符串456e633064316e675f31735f66336e,通過Python,按照兩個字符,例如45,6e,63形式變成ascii碼格式,輸出acsii碼格式的字符串。
代碼如下:    
a = "456e633064316e675f31735f66336e"
''.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]])
拆分了代碼,實際運行了一下,解釋一下代碼的意思:
1、    
[a[i:i+2] for i in range(0, len(a), 2)]

這段是lamda表達式,說白了,就是一個for循環,范圍是從0開始到a字符串的長度,每次步進2,也就是第一次是0,第二次是2,第三次是4。。。

相應的 a[i:i+2],就是第一次從a里取出0:0+2 也就是0:2,那么實際上類似于數組,也就是取出a字符串的前面2個字符,注意這里0:2 實際上是不包含2的,只是0、1而已。

然后,外面的一層[ ]的意思就是把循環的返回結果放到一個 列表里,列表就是[]包含在內的,用逗號分隔的串。但是這樣表達式可以起到簡化代碼的作用。

實際結果就是:    
======================== C:\c - 副本 (2).py ========================
['45', '6e', '63', '30', '64', '31', '6e', '67', '5f', '31', '73', '5f', '66', '33', '6e']

2、    
[chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]]

這個外層的for循環就是把內存的for循環結果 :
    
['45', '6e', '63', '30', '64', '31', '6e', '67', '5f', '31', '73', '5f', '66', '33', '6e']

再次遍歷一遍,就是每次從這個列表里取出一個元素,這里就是b,然后對b進行轉化,這里int(b,16)表示 b是一個16進制的數字,把這個數字轉化為int整型,然后chr函數把這個整數轉化為字符,也就是ascii字符。
結果為:
    
['E', 'n', 'c', '0', 'd', '1', 'n', 'g', '_', '1', 's', '_', 'f', '3', 'n']

3、
    
''.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]])

就是用‘'空串,把后面的 ['E', 'n', 'c', '0', 'd', '1', 'n', 'g', '_', '1', 's', '_', 'f', '3', 'n'] 列表中的每個元素,join串聯在一起。

最后的結果就是:Enc0d1ng_1s_f3n

4、另一種寫法    
a = "456e633064316e675f31735f66336e"
al = []
for i in range(0, len(a), 2):
  b = a[i:i+2]
  al.append(chr(int(b, 16)))
print ''.join(al)

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢