Python чтение данных .bin и преобразование в строку - PullRequest
0 голосов
/ 03 марта 2020

У меня есть несколько файлов bin, и я хочу извлечь из них данные, но результаты, которые я получаю, довольно странные.

Например, мой первый файл выполняет следующие действия:

path = 'D:\lut.bin'
with open(path, 'rb') as file: # b is important -> binary
    fileContent = file.read()
    print(fileContent)

Вывод:

xc7\xfb\x99\x0c\x8e\xf9~7\xb9a\xb1*\x06\xd2o\xb8\xb2 \x81\x8bg\xd2\xc6bE\r\xb9KL7\xa0\xa52\xa5\xd2\x17\x86(\xe9\x02\xbf\xeb\x8fDvk\xe7\x8d\x03\x872\x9fop\xbck\xe1\x94\x02\xdc\xef\x85I\t\xc8\x8d\xdfl\x90\xcf*\xb1\x02(\x16~)\xc7\xa2\x1f\xf6o\xdc\x1en\x84H\xf6%\xfaW/\xee\xbc\xdd^/\x9b\x9a\xe5\x99\xa2\xd7\xe4\x93U\xd4\xef$\xa5\x8aW\xf6\xc9\xb0T\xe3<\x147\xcc\x08}\xc8\x15J3v\n\x9d\x16\xa3\x8d\r\xa2\xc4\x15\xf13!\xa2\x01\x14\xef\xaf\x06\x83p\xa7Ot\x8cr\xdf\xef\xbe\x93\xc2D`y\\\xdb\x8a\x1c\\H\x9cE\xabF\xd6\xe1B\xdd\xbc\x8a\xdb\x06|\x05{!\xf0K25K0\xb9\xfe\xa6n\xd7-\xd1\xcb\xefQ\xd9w\x08{4\x13\xba8\x06\x00}S\xe4\xd8*\xe2\x81f\x8d\xc4P\xde\x88/\xa6q\x7fG\x99\xbd\xa84v\xcfS+\xc6\xc5#\x0ey\xd8\xcd\xf2!\xf8`1\x03k5\xb9\xee\xb3V\xc3">\xdd\xf4\x94\x1b\x83\xf9\xdbe\xfcw\xf4+O\xf4\xf1\xfc\xa2 \xc5\xccq\xd1\xc8dH\x00\xf7K|7\x87\xa8$\xb8\x92^\x90.\xffK\xbf\xf6\xcaHv9l\xa6\x0e\xd5"\xd6`>}f\xfc\xd1\x15\xd0\xf0\x89\xb7\x12\xdf\xc9\xdfn\x97\xc7O\xf8\x05)Ua|\xd6\xd5\x03P\xf3\xcd\x08 \xc6\xc7\xe2"\xae\x1fz\xb9\xbd\x99\x100\x9a\x8d\xeb\x89\xa3T\xa0\xc7S\xcc\xe4h\xbe\xf3R\xe9\x9d\xf4Y\xe91\xa4%\x85>mn\xc3\x1e\x8a}\x04\xd9:\xb5\xde\x01h\x90y\xfe4&\xea\x1d\x9a\xbd\xac\x1a\x8e{\xb2Y\xcb\xc47\xd8\xe2\xf6\xd6\xdc\x91,]\x1d\xca\x90_sb\x86X\xad]\x8e\xe1A\x1a\xaa\xc6\xdf\x1ca@A\x1a\xa2\t!3\x06y\x92\x96\xebg\xdb3\xdd\x9f\xefh\x9d6\x17c0\x0e\xfe\x9a\x06\x06;\x16\xa7\x

Я понятия не имею, что это такое, но это не похоже на читаемый текст, есть ли способ даже преобразовать это? Мой другой файл выглядит следующим образом:

U\xff\xf3\xe8d\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03H\x00\x00\x00\x00LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

Снова с тем же кодом, приведенным выше.

Я пытался декодировать его, я получаю ошибки декодирования, и кодирование текста в utf-8 не делает ' И это тоже не поможет.

Я хочу получить от этого текст, эти файлы пришли с книгой в PlayStore, которую я скачал.

1 Ответ

0 голосов
/ 03 марта 2020

Bin-файлы - это просто двоичные данные, то есть каждый байт может иметь любое значение от 0 до 255 (00000000 и 11111111, шестнадцатеричное 0x00 - 0xFF).

Печатными символами являются подмножество этих кодов.

Это означает, что не каждый двоичный файл может быть преобразован в текст.


Python пытается визуализировать поток байтов уже, помещая эти печатаемые символы вместо их \xNN код (где N - это шестнадцатеричный ди git). Остальные символы печатаются как их коды.

Это означает, что

U\xff\xf3\xe8d\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03H\x00\x00\x00\x00LAME3.100UU

на самом деле

\x55\xff\xf3\xe8\x64\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03\x48\x00\x00\x00\x00\x4c\x41\x4d\x45\x33\x2e\x31\x30\x30\x55\x55

[Скопируйте это в ваш Python интерпретатор в виде строки (то есть в кавычках) и посмотрите, как она визуально преобразуется при отображении / печати!]

Детали:

  • , декодированные U,
  • затем не декодируется \xff\xf3\xe8
  • декодируется d
  • не декодируется \x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03
  • декодируется H
  • не декодируется \x00\x00\x00\x00
  • декодировано LAME3.100UU

Можете ли вы извлечь из него некоторые данные? В зависимости от типа корзины, вы, вероятно, можете найти некоторые строки, прямо вставленные туда - например, LAME3.10, который выглядит как некоторый код / ​​версия ... но Я действительно сомневаюсь, что вы бы найди что нибудь полезное. Это может быть буквально все, что угодно, только что скопировано туда: текст, фото, дамп памяти ...

...