2014-02-14 3 views
0

Я пытаюсь распаковать некоторые необработанные данные. (Его более 3 байтов, но я уменьшил его до этого.)python struct unpack h или H alignment

Я не ожидаю трассировки в следующем коде. Нужно ли мне? Это проблема из-за выравнивания? Как вы видите, 2-й успех. (Мои данные не привязаны, я могу закодировать его, но мне нужно?)

Я ожидаю (1, 770) или (1, 515) Я полагаю, а не исключение.

http://docs.python.org/2/library/struct.html (В = Uchar, 1,8 и Н = короткая, 2,16)

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win 
32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from struct import * 
>>> unpack('BH', '\x01\x02\x03') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    struct.error: unpack requires a string argument of length 4 
>>> unpack('HB', '\x01\x02\x03') 
(513, 3) 
>>> 
+0

Привет, что вы на самом деле пытаетесь распаковать? 123? – theAlse

+0

Его необработанные двоичные данные, такие как 0x010203 ... (3 байта) с машины, а 01 - значение поля1, а 0203 - значение поля2 и т. Д. ( Игнасио ниже исправил это в любом случае.) – joec

ответ

1

Примечания:

  1. ...
  2. не добавляется обивка при использовании неродного размера и выравнивания, например с '<', '>', '=' и '!'.

source

>>> struct.unpack('<BH', '\x01\x02\x03') 
(1, 770) 
>>> struct.unpack('>BH', '\x01\x02\x03') 
(1, 515) 
+0

Отлично! Спасибо. Только то, что я хотел. – joec

Смежные вопросы