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

时间:2016-05-01 18:24:58

标签: python file raw-data

我有以下问题:

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

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

  

\ XFC \ xe8 \ X82 \ X00 \ X00 \ X00 \ X60 \ X89 \ xe5 \ X31 \ XC0 \ 64 \ x8b \ X50 \ X30 \ x8b \ X52

使用的代码:

  

data = open(“filename”,“rb”)。read()

获得的结果:

  

B“\\ XFC \\ xe8 \\ X82 X00 \\ \\ X00 X00 \\ \\ X60 \\ X89 \\ xe5 \\ X31 \\ XC0 \\ 64 \\ x8b \\ X50 X30 \\ \\ x8b \\ X52"

使用dobule \。

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

3 个答案:

答案 0 :(得分:0)

此输出正常

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

答案 1 :(得分:0)

确定。你的问题在于你提出了错误的问题。您的数据文件不是原始二进制字符串,它是一个编码的二进制字符串,用转义字符编码。但是,当您需要解码转义时,您可以将其作为原始二进制文件读取。尝试

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

代替。

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

答案 2 :(得分:0)

要将4个ascii字符(\ x f c)从文件转换为单个字节(252==0xfc),您可以将ascii字符读为bytes(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个字节)。