将十六进制字符串转换为python3中的字符

问题描述

我需要将诸如 5555555547aa 之类的字符串转换为一串字符(即 �GUUUU)。我有一个在 python2 中工作的函数,它在下面发布,但我无法在 python3 中正常工作。我该怎么做?

    def hex_conv(hex_str):
      arr = [hex_str[i:i+2] for i in range(0,len(hex_str),2)]
      rev = arr[::-1]
      out_str = ""
      for i in rev:
        print(i)
        out_str += ("\\x" + i).decode("string_escape")
      return out_str

更清楚我需要输出内容(在 Python2 中):

print('\xaa\x47\x55\x55\x55\x55')

我试过了

print(bytes.fromhex("5555555547aa")[::-1].decode("utf-8",errors="replace"))

这不太管用。它似乎产生相同的输出,但实际字节不同。

注意:此输出将通过管道传输到另一个程序(用于二进制开发),因此需要准确打印字节。

解决方法

您只需要结合 2 个步骤:使用 bytes.fromhex 从十六进制转换为字节串,并使用 sys.stdout.buffer.write 将字节串打印到标准输出。综合起来:

import sys
sys.stdout.buffer.write(bytes.fromhex("5555555547aa")[::-1])

来源于hexadecimal string to byte array in pythonHow to write a raw hex byte to stdout in Python 3?