Что делает Python, когда я пытаюсь прочитать двоичный файл? - PullRequest
0 голосов
/ 24 декабря 2018

Скажем, у меня есть файл с именем "шрифт" без расширения.Содержимое «шрифта» (при просмотре в 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. Возвращение таких вещей, как дополнительные обратные слеши, заглавные буквы, буквы за пределами шестнадцатеричного диапазона, скобки, восклицательные знаки, Шестизначные шестнадцатеричные "байты" и т. Д.

И как мне получить ожидаемый результат, а именно:

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

1 Ответ

0 голосов
/ 24 декабря 2018

Если вы хотите получить 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
...