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

问题描述 投票:1回答:1

我正在尝试使用格式化的字符串'解包'(使用Python的struct模块)一个bytearray到多个变量:

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

我期待(当我读到docs时):

  • a到e将是一个无符号短(每个大小为2个字节)
  • f和g将是一个无符号字符(每个字符大小为1个字节)
  • h将是无符号长整数(大小为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?

python multiplatform
1个回答
0
投票

谢谢@jasonharper:

您必须使用标准字节顺序/大小/对齐指示符(通常为struct<)之一启动>格式字符串,以获得任何类型的跨平台兼容性

© www.soinside.com 2019 - 2024. All rights reserved.