python字符串处理编程

二进制程序猿 2016-05-18 12:14:13
现在我知道一个字符串456e633064316e675f31735f66336e,如何将它编程实现转换,按照两个字符,例如45,6e,63形式变成ascii码格式,输出acsii码格式的字符串
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
二进制程序猿 2016-05-24
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
我也是初学python,看不太懂。 我拆分了代码,实际运行了一下,给你解释一下,这个代码的意思: 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而已。 然后外面的一层[ ]的意思就是把循环的返回结果放到一个 列表里,列表就是[]包含在内的,用逗号分隔的串。 但是这样表达式可以起到简化代码的作用,实际结果就是:
======================== RESTART: 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
非常感谢!!!!!!1
LongRui888 2016-05-23
  • 打赏
  • 举报
回复
我也是初学python,看不太懂。 我拆分了代码,实际运行了一下,给你解释一下,这个代码的意思: 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而已。 然后外面的一层[ ]的意思就是把循环的返回结果放到一个 列表里,列表就是[]包含在内的,用逗号分隔的串。 但是这样表达式可以起到简化代码的作用,实际结果就是:
======================== RESTART: 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
屎克螂 2016-05-23
  • 打赏
  • 举报
回复
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)
ForestDB 2016-05-19
  • 打赏
  • 举报
回复
你哪里不懂?
ForestDB 2016-05-18
  • 打赏
  • 举报
回复

a = "456e633064316e675f31735f66336e"
''.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]])
'Enc0d1ng_1s_f3n'
二进制程序猿 2016-05-18
  • 打赏
  • 举报
回复
引用 1 楼 ForestDB 的回复:

a = "456e633064316e675f31735f66336e"
''.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]])
'Enc0d1ng_1s_f3n'
能具体解释一下意思吗?

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧