本文实例讲述了Python实现将16进制字符串转化为ascii字符的方法。分享给大家供大家参考,具体如下:
字符串456e633064316e675f31735f66336e,通过Python,按照两个字符,例如45,6e,63形式变成ascii码格式,输出acsii码格式的字符串。
代码如下:
1
2
|
a = "456e633064316e675f31735f66336e"
''.join([ chr ( int (b, 16 )) for b in [a[i:i + 2 ] for i in range ( 0 , len (a), 2 )]])
|
拆分了代码,实际运行了一下,解释一下代码的意思:
1、
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而已。
然后,外面的一层[ ]的意思就是把循环的返回结果放到一个 列表里,列表就是[]包含在内的,用逗号分隔的串。但是这样表达式可以起到简化代码的作用。
实际结果就是:
1
2
|
= = = = = = = = = = = = = = = = = = = = = = = = C:\c - 副本 ( 2 ).py = = = = = = = = = = = = = = = = = = = = = = = =
[ '45' , '6e' , '63' , '30' , '64' , '31' , '6e' , '67' , '5f' , '31' , '73' , '5f' , '66' , '33' , '6e' ]
|
2、
1
|
[ chr ( int (b, 16 )) for b in [a[i:i + 2 ] for i in range ( 0 , len (a), 2 )]]
|
这个外层的for循环就是把内存的for循环结果 :
1
|
[ '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字符。
结果为:
1
|
[ 'E' , 'n' , 'c' , '0' , 'd' , '1' , 'n' , 'g' , '_' , '1' , 's' , '_' , 'f' , '3' , 'n' ]
|
3、
1
|
''.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、另一种写法
1
2
3
4
5
6
|
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)
|
希望本文所述对大家Python程序设计有所帮助。