zoukankan      html  css  js  c++  java
  • 【Python】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)

  • 相关阅读:
    html与app交互
    算法:算法的时间与空间复杂度
    php加解密函数集合
    redis主要用法
    【原创】RabbitMQ教程:php实现
    安装RabbitMq
    mysql复制表和字段
    vim文本操作
    JAVA学习(常量)
    JAVA学习(变量)
  • 原文地址:https://www.cnblogs.com/momogua/p/8304600.html
Copyright © 2011-2022 走看看