чтение структурированных двоичных данных в python3.6 с использованием struct - PullRequest
0 голосов
/ 10 ноября 2018

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

Итак, у меня есть файл:

path = 'myPath/file.pd0'
in_file = open(path, "rb")
read_file = in_file.read()
type(read_file) 

когда я пытаюсь проверить, что находится внутри read_file, я получаю:

b'\x7f\x7f\xcc\x05\x00\x0f$\x00`\x00\xa2\x00$\x02\xe6\x02\xa8\x03\xd0\x032\x04d\x04\x96\x04\xa6\x04\xe0\x04'

Тип файла read_file - байты. Когда я пытаюсь использовать struct, так как это функция, которую люди предлагают, я получаю следующую ошибку:

import struct
struct.unpack('hhl', read_file[0:30])

error: unpack requires a buffer of 16 bytes

Независимо от того, что я получаю, распаковка требует буфера из n байтов.

Файловая структура, которую я пытаюсь прочитать, определяется следующим образом:

HEADER (6 БАЙТОВ + [2 ТИПА ДАННЫХ №])

ФИКСИРОВАННЫЕ ЛИДЕРНЫЕ ДАННЫЕ (60 байт)

ПЕРЕМЕННЫЕ ЛИДЕРНЫЕ ДАННЫЕ (66 байт)

КОРРЕЛЯЦИОННОЕ МАГНИТУ (2 байта + 4 байта за ячейку глубины)

Есть идеи, как мне начать читать эти байты, используя struct или что-то подобное в python?

Спасибо

1 Ответ

0 голосов
/ 10 ноября 2018

unpack() ожидает байты, которые являются точной длиной формата, описанного его первым аргументом. Строка формата 'hhl' описывает данные размером 16 байтов (на вашем компьютере - см. Ниже), поэтому вы должны передать строку байтов размером 16. Если вы хотите проанализировать только часть байтов, вы можете сделать это:

fmt = 'hhl'
size = struct.calcsize(fmt)
struct.unpack(fmt, data[:size])

Кроме того, ваша строка формата не имеет порядка байтов, размера и спецификатора выравнивания . Предполагается, что по умолчанию он «родной». Это означает, что ваш код зависит от системы, что, вероятно, не то, что вы хотите для анализа формата файла. Возможно, вам понадобятся разные выравнивания для разных частей файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...