Почему есть разница между calcsize ("! BHB") и calcsize ("BHB")? - PullRequest
0 голосов
/ 03 января 2011

Используя модуль struct в python 2.4.3, почему есть разница между calcsize ("! BHB") и calcsize ("BHB")? согласно которому; когда

from struct import *
calcsize("!BHB") == 4
calcsize("BHB") == 5

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

1 Ответ

5 голосов
/ 03 января 2011

Причина этого объясняется в Python Docs , и это связано с проблемой заполнения, когда вы используете элементы со смешанной структурой (BHB)

  1. Paddingавтоматически добавляется только между последовательными элементами структуры.Заполнение не добавляется в начало или конец закодированной структуры.

  2. Заполнение не добавляется при использовании нестандартного размера и выравнивания, например, с помощью «<», «>»,'=' и '!'.

См. это:

>>> struct.pack("BHB",1,1,1)
'\x01\x00\x01\x00\x01'
>>> struct.pack("=BHB",1,1,1)
'\x01\x01\x00\x01'

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

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