Различия в размере упакованных двоичных данных Python среди платформ? - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь «распаковать» (используя Python-модуль struct) байтовый массив для нескольких переменных, используя отформатированную строку:

(a, b, c, d, e, f, g, h) = unpack('HHHHHBBL', my_byte_array)

Я ожидаю (когда я читаю документы ), что:

  • a - e будет коротким без знака (размером 2 байта каждый)
  • f и g будут unsigned char (размером 1 байт каждый)
  • h будет unsigned long (с размером 8 байт)

Когда я запускаю это на своем компьютере с Windows 10, это именно то, что я получаю.

На двух других моих машинах с Mac OS X и Manjaro Linux (на всех трех установлен Python 3.7) я получу сообщение об ошибке:

struct.error: unpack requires a buffer of 24 bytes

Когда я запускаю следующее, вывод одинаков на всех трех машинах

>>> from struct import *
>>> calcsize('H')
2
>>> calcsize('B')
1
>>> calcsize('L')
8

Но когда я запускаю следующее:

>>> calcsize('HHHHHBBL')

Вывод на моем компьютере с Windows - 16 , но на двух других системах 24 . Что мне кажется странным, что здесь происходит?

А как мне использовать struct.unpack в многоплатформенной среде?

1 Ответ

0 голосов
/ 14 марта 2019

Спасибо @jasonharper:

Вы должны начать строку формата struct с одного из стандартных индикаторов порядка / размера / выравнивания байтов (обычно < или >), чтобы получить кросс-платформенную совместимость любого типа

...