平台之间Python打包二进制数据大小的差异?

时间:2019-03-14 13:45:20

标签: python multiplatform

我正在尝试使用格式化字符串将字节数组“解包”(使用Python的struct模块)到多个变量:

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

(当我读到docs时)期望:

  • a e 将是一个 unsigned short (大小各为2个字节)
  • f g 将是一个无符号字符(每个大小为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 :(得分:0)

感谢@jasonharper:

  

您必须使用标准字节顺序/大小/对齐指示符之一(通常为struct<)开始>格式的字符串,以获取任何形式的交叉平台兼容性