在 Python 中读取 \xHH 作为原始二进制文件从文件中转义

read \xHH escapes from file as raw binary in Python

我有以下问题:

我想从文件中读入原始二进制字符串:

文件看起来像这样(带有转义字符,不是二进制数据):

\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52

使用的代码:

data = open("filename", "rb").read()

获得的结果:

b"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52"

双倍\.

如何将其读作二进制字符串,例如:\xaa 个字符? (没有转义字符)

此输出 正常

Python 是 输出 此数据,带有双反斜杠以表明它 不可打印 。但是,它 正确存储 为字节。

好的。你的问题是你问错了问题。您的数据文件不是原始二进制字符串,而是经过编码的字符串,使用转义字符进行编码。但是,当您需要解码转义符时,您正在将其作为原始二进制文件读取。尝试

data = open("filename", "r", encoding='unicode_escape').read().encode('raw_unicode_escape')

相反。

编辑:好的,现在可以了。您需要编码为 raw_unicode_escape,而不是 utf-8(默认值)。

要将文件中的 4 个 ascii 字符 (\ x f c) 转换为单个字节 (252==0xfc),您可以读取 ascii字符作为字节 (data = open("filename", "rb").read()),删除 \x 前缀并将生成的十六进制字节串转换为包含相应原始二进制数据的 bytes

>>> import binascii
>>> data = b'\xfc\xe8\x82'
>>> binascii.unhexlify(data.replace(b'\x', b''))
b'\xfc\xe8\x82'

最好避免首先将数据存储为 b'\xfc'(4 个字节)而不是 b'\xfc'(1 个字节)。