Python3 ASCII 十六进制到二进制字符串的转换



我在Windows上使用Python 3.2.3,并尝试将C样式ASCII文件中的二进制数据转换为二进制等效项,以便以后使用结构模块进行解析。例如,我的输入文件包含"0x000A 0x000B 0x000C 0x000D",我想将其转换为"\x00\x0a\x00\x0b\x00\x00\x0c\x00\x0d"。

我遇到的问题是字符串数据类型在 Python 3 中发生了变化,并且从十六进制转换为二进制的内置函数(例如 binascii.unhexlify() )不再接受常规的 unicode 字符串,而只接受字节字符串。从 unicode 字符串转换为字节字符串并返回的过程让我感到困惑,所以我想知道是否有更简单的方法来实现这一点。以下是我到目前为止所拥有的:

with open(path, "r") as f:
    l = []
    data = f.read()
    values = data.split(" ")
    for v in values:
            if (v.startswith("0x")):
                    l.append(binascii.unhexlify(bytes(v[2:], "utf-8").decode("utf-8")
    string = ''.join(l)
3>> ''.join(chr(int(x, 16)) for x in "0x000A 0x000B 0x000C 0x000D".split()).encode('utf-16be')
b'x00nx00x0bx00x0cx00r'

正如 agf 所说,使用模式"r"打开图像将为您提供字符串数据。由于您在这里唯一要做的就是查看二进制数据,因此您可能希望使用"rb"模式打开并生成字节类型而不是 str 的结果。

像这样:

with open(path, "rb") as f:
    l = []
    data = f.read()
    values = data.split(b" ")
    for v in values:
            if (v.startswith(b"0x")):
                    l.append(binascii.unhexlify(v[2:]))
    result = b''.join(l)

最新更新