Распаковать двоичные данные с помощью Python

Я хотел бы распаковать массив двоичных данных в uint16 данные с Python.

Интернет полон примеров использования struct.unpack но только примеры, имеющие дело с двоичным массивом размером 4.

Большинство из этих примеров следующие (B это двоичный массив из файла)

U = struct.unpack("HH",B[0:4]);

Поэтому я попытался распаковать массив размером 6:

U = struct.unpack("HHH",B[0:6]);

Оно работает.

Но как это сделать, если я хочу распаковать массив размером L (L такое пара)? Я попробовал это:

U = struct.unpack("H"*(L/2),B[0:L]);

но это не работает, суфлер дает мне ошибку (для L=512 например):

struct.error: unpack requires a string argument of length 512

Это сообщение странно, потому что если я хочу распаковать двоичный массив в uint16Мне нужна строка "HHH...HHH" половины размера этого массива...

Я был бы очень признателен, если бы кто-нибудь смог мне помочь.


Я немного прогрессирую... На самом деле я пытался:

U = struct.unpack("H"*8,B[0:8]); 

Оно работает.

U = struct.unpack("H"*10,B[0:10]);

Оно работает.

U = struct.unpack("H"*222,B[0:444]);

Это все еще работает

U = struct.unpack("H"*223,B[0:446]);

Это не работает! и это никогда не работает для размера больше 446

Надеюсь, это поможет кому-нибудь ответить мне.


@MarkRansom Я проверил len(B), и на самом деле длина составляет 444. Я был настолько уверен, что B - это массив размера 512, потому что B происходит из: B = f.read(512) где F - это файл размером 8000 байт. Так что проблема с read()... Спасибо за этот ответ! Но если кто-то поможет распаковать двоичный массив размера L, я был бы признателен

3 ответа

Используйте array.fromstring или array.fromfile (см. Http://docs.python.org/2/library/array.html):

import array
U = array.array("H")
U.fromstring(B)

Вариант с переменной длиной одного и того же:

n = 999
U = struct.unpack(str(n)+"H", B)

Если вы хотите распаковать n элементов из двоичных данных, вы указываете количество элементов вместе с типом данных. Для n=999:

U = struct.unpack("999H", B)
Другие вопросы по тегам