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
16进制字符串转16进制数组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:这⾥再为⼤家推荐⼏款相关⼯具供⼤家参考使⽤:
更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》。
希望本⽂所述对⼤家Python程序设计有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论