当我尝试读取二进制文件时,Python在做什么?

时间:2018-12-24 05:04:29

标签: python arrays binary byte

说我有一个名为“ font”的文件,没有扩展名。 “字体”的内容是(当通过Sublime Text查看时):

774f 4646 0001 0000 0000 7bac 0011 0000
0000 e148 0001 0000 0000 7650 0000 055c
0000 0a6a 0000 0000 0000 0000 4750 4f53
0000 0180 0000 078b 0000 218a b149 b3e5

我有Python代码:

with open('font', 'rb') as f:
    bytes = f.read()
    print(bytes)

哪些印刷品:

b'wOFF\x00\x01\x00\x00\x00\x00{\xac\x00\x11\x00\x00\x00\x00\xe1H\x00\x01\x00\x00\x00\x00vP\x00\x00\x05\\\x00\x00\nj\x00\x00\x00\x00\x00\x00\x00\x00GPOS\x00\x00\x01\x80\x00\x00\x07\x8b\x00\x00!\x8a\xb1I\xb3\xe5'

为什么是Python:

  1. 将某些字节解码为ASCII(774f464->wOFF
  2. 返回多余的反斜杠,大写字母,十六进制范围之外的字母,方括号,感叹号,6位十六进制“字节”等内容。

我应该如何获得预期的结果,即:

\x77\x4f\x46\x46\x00\x01...

1 个答案:

答案 0 :(得分:1)

如果要从字节中获取hex string,请使用bytes_data.hex()

data = b'wOFF\x00\x01\x00\x00\x00\x00{\xac\x00\x11\x00\x00\x00\x00\xe1H\x00\x01\x00\x00\x00\x00vP\x00\x00\x05\\\x00\x00\nj\x00\x00\x00\x00\x00\x00\x00\x00GPOS\x00\x00\x01\x80\x00\x00\x07\x8b\x00\x00!\x8a\xb1I\xb3\xe5'
print(data.hex())

输出为:

774f46460001000000007bac001100000000e14800010000000076500000055c00000a6a000000000000000047504f53000001800000078b0000218ab149b3e5