• 十六进制字符串转Python代码(utf-8字符串转十六进制字符串)




    十六进制字符串转
    Python代码
    (utf-8字符串转十六进制字符串)


    目 录


      在QQ“Python学习群”看到一条提问“如何把十六进制代码转换为原始文件呢”?刚好我前面“研究”一行装逼代码学到了一点相关技巧(可以点击蓝色文字查看详情),在此记录个笔记,“抛砖引玉”🤪🤪

    QQ提问截屏图片
    在这里插入图片描述


    回页首

      正好今天在另一个Python学习群里“聒噪”,回答了一个小问题,有一段现成的Python代码:

    小题目提问截屏图
    在这里插入图片描述
    解题Python代码

    from random import choices # 加载random.choices()方法。
    
    nums = range(1, 11) # 定义1~10的一维数组。
    print(f"\n数组 {list(nums)} 长度:{len(nums)}") # 打印数组长度。
    new_nums = choices(nums, k=3) # 随机从1~10中选取三个元素的新数组。
    print(f"\n取数组 nums 随机三个元素求和:\n随机数组:{new_nums},求和sum:{sum(new_nums)}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    run代码效果截屏图片
    在这里插入图片描述
    在这里插入图片描述


    回页首

      就拿那段解小题的Python代码开刀试炼:先写个Python代码转十六进制字符串的函数,再写个将十六进制字符串的字符串转utf-8代码的函数。两个函数的语句都作了很详细的注释,这里就不再罗嗦了。“造好”这两个函数,就可以方便地进行“操刀”了。😁

    Python代码转十六进制字符串函数

    
    def to_hex(string):
        ''' 字符串转十六进制 '''
        hex_string = [] # 初始化转换后的十六进制字符列表。
    
        for i in string: # 遍历字符串。
            hex_string.append(hex(ord(i))[2:].zfill(4).upper()) # 用“切片”[:3]方式截取转换后的十六进制字符串除十六进制标识字符外的字符串。由于有的中文字符需四位十六进制字符表示,所以用str.zfill(4)设置成每个字符四位十六进制字符(不足四位前置0)。为了好看,我用str.upper()方法转小写字母为大写。
    
        return ''.join(hex_string) # 返回“无缝链接”后的十六进制字符串。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    回页首

    十六进制字符串转utf-8代码函数

    
    def hex_to_chr(hex_string):
        ''' 十六进制字符转utf-8字符串 '''
        chars = [] # 初始化转换后的utf-8字符串列表。
    
        for i in zip(*[iter(hex_string)]*4):   # 遍历十六进制字符串截取的四位十六进制字符元组。十六进制四位字符截取,用zip()、iter()配合*(星号)实现。
            chars.append(chr(int(''.join(i), 16))) # 无缝拼接四个十六进制字符串,用int(hex_string, 16)内置函数转换成整数,再用内置函数chr(int_num)还原成字符。
    
        return ''.join(chars) # 返回“无缝链接”转换后的utf-8字符串。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    回页首

    示例代码运行效果截屏图片
    在这里插入图片描述


    回页首

    完成示例代码(跳过完整代码)

    #!/sur/bin/nve python
    # coding: utf-8
    
    '''
    filename = 'hex&utf-8.py'
    author = 'dream elf cq'
    date = '2022-08-14'
    '''
    
    
    def to_hex(string):
        ''' 字符串转十六进制 '''
        hex_string = [] # 初始化转换后的十六进制字符列表。
    
        for i in string: # 遍历字符串。
            hex_string.append(hex(ord(i))[2:].zfill(4).upper()) # 用“切片”[:3]方式截取转换后的十六进制字符串除十六进制标识字符外的字符串。由于有的中文字符需四位十六进制字符表示,所以用str.zfill(4)设置成每个字符四位十六进制字符(不足四位前置0)。为了好看,我用str.upper()方法转小写字母为大写。
    
        return ''.join(hex_string) # 返回“无缝链接”后的十六进制字符串。
    
    
    def hex_to_chr(hex_string):
        ''' 十六进制字符转utf-8字符串 '''
        chars = [] # 初始化转换后的utf-8字符串列表。
    
        for i in zip(*[iter(hex_string)]*4):   # 遍历十六进制字符串截取的四位十六进制字符元组。十六进制四位字符截取,用zip()、iter()配合*(星号)实现。
            chars.append(chr(int(''.join(i), 16))) # 无缝拼接四个十六进制字符串,用int(hex_string, 16)内置函数转换成整数,再用内置函数chr(int_num)还原成字符。
    
        return ''.join(chars) # 返回“无缝链接”转换后的utf-8字符串。
    
    
    if __name__ == '__main__':
        pycodes = '''
    from random import choices # 加载random.choices()方法。
    
    nums = range(1, 11) # 定义1~10的一维数组。
    print(f"\n数组 {list(nums)} 长度:{len(nums)}") # 打印数组长度。
    new_nums = choices(nums, k=3) # 随机从1~10中选取三个元素的新数组。
    print(f"\n取数组 nums 随机三个元素求和:\n随机数组:{new_nums},求和sum:{sum(new_nums)}")
    '''
        hex_string = to_hex(pycodes)
        print(f"\nPython代码字符串:\n{'-'*50}\n{pycodes}\n{'-'*50}\n转十六进制字符:\n{hex_string}")
        print(f"\n将上面的十六进制字符串,转utf-8字符串:\n{'-'*50}\n{hex_to_chr(hex_string)}\n{'-'*50}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    回页首

      十六进制字符串转换成为utf-8字符串,其实有一点需要明白——几个十六进制字符表示一个utf-8字符。如果没弄明白这一点,转换后的字符串“乱码”的几率是比较大的。本笔记示例Python代码中有大量的中文注释,所以我用四位十六进制字符来表示那段Python代码的每一个字符。英文字符是ASCII码,在0~255区间,仅用两位十六进制字符就可表示一个英文字符。中文字符则需要三、四个十六进制字符才可以表示。

  • 相关阅读:
    Offset偏移分页Keyset键集分页(基于查找的分页)
    FPGA - 7系列 FPGA内部结构之Clocking -03- 时钟管理模块(CMT)
    Vue+NodeJS实现邮件发送
    统计信号处理基础 习题解答6-5
    这些负载均衡都解决哪些问题?服务、网关、NGINX
    中国智能家居行业市场全景调研与发展前景预测报告
    WIFI产品使用指导说明
    开源数字基础设施 项目 -- Speckle
    JSON转换
    Django(八、如何开启事务、介绍长见的字段类型和参数)
  • 原文地址:https://blog.csdn.net/m0_57158496/article/details/126336904