2

我有以下问题:

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

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

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

使用的代码:

数据 = open("文件名", "rb").read()

得到的结果:

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

带双 \ 。

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

4

3 回答 3

2

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

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

反而。

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

于 2016-05-01T18:34:55.753 回答
0

要将\ x f c文件中的 4 个 ascii 字符 ( ) 转换为单个字节 ( 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 个字节)。

于 2017-01-15T17:12:59.467 回答
0

这个输出没问题

Python is outputting this data with double backslashes to show that it is non-printable. However, it's stored correctly, as bytes.

于 2016-05-01T18:27:28.383 回答