Сообщить об ошибке.

Строка формата структуры модуля struct в Python

Порядок байтов, размер и выравнивание в структуре модуля struct

Строка формата структуры - это механизм, используемый для указания ожидаемого макета при упаковке и распаковке данных. Они составлены из символов формата, которые определяют тип данных, которые упаковываются/распаковываются.

Для управления байтовым порядком, размером и выравниванием данных, есть специальные символы, которые представлены в таблице ниже.

Первый символ строки формата может использоваться для указания порядка байтов, размера и выравнивания упакованных данных в соответствии со следующей таблицей:

В таблице ниже представлены символы управления байтовым порядком:

Символ
управления
Порядок байтовРазмерВыравнивание
@собственныйсобственныйсобственное
=собственныйстандартнет
<прямой порядок байтов (little-endian)стандартнет
>обратный порядок байтов (big-endian)стандартнет
!network (= big-endian)стандартнет

Если первый символ не является одним из указанных в таблице, то подразумевается, что используется по умолчанию - '@'.

Собственный порядок байтов - это обратный прядок байтов или прямой прядок байтов, в зависимости от хост-системы. Например, Intel x86 и AMD64 (x86-64) имеют прямой порядком байтов. Motorola 68000 и PowerPC G5 обратный прядок байтов; ARM и Intel Itanium имеют переключаемый порядок байтов (bi-endian). Используйте sys.byteorder, чтобы проверить порядок байтов в вашей системы.

Собственный размер и выравнивание определяются с помощью выражения sizeof компилятора языка C, что всегда сочетается с собственным порядком байтов.

Стандартный размер зависит только от символов формата. Смотрите таблицу в разделе "Символы формата строки формата, модуля struct".

Обратите внимание на разницу между символами управления байтовым порядком '@' и '=': оба используют собственный порядок байтов, но размер и выравнивание последнего стандартизированы.

Символ управления байтовым порядком '!' доступен для тех, кто не помнит, является ли порядок байтов в сети прямым или обратным.

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

Заметки:

  • Заполнение добавляется только автоматически между последовательными элементами структуры. Заполнение не добавляется в начало или конец закодированной структуры.
  • При использовании нестандартного размера и выравнивания отступы не добавляются. Например с символами управления байтовым порядком '<', '>', '=' и '!'.
  • Чтобы выровнять конец структуры в соответствии с требованием выравнивания определенного типа, завершите формат кодом для этого типа с нулевым числом повторений. Смотрите примеры.