本文實例講述了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)
PS:這里再為大家推薦幾款相關工具供大家參考使用:
ASCII碼對照表:
http://tools.jb51.net/table/ascii
Native/ASCII在線編碼轉換工具:
http://tools.jb51.net/transcoding/native2ascii
在線中文漢字/ASCII碼/Unicode編碼互相轉換工具:
http://tools.jb51.net/transcoding/chinese2unicode            
新聞熱點
疑難解答