Python 平台间打包二进制数据大小的差异?
Differences in Python's packed binary data size among platforms?
我正在尝试 'unpack'(使用 Python 的结构模块)一个字节数组到多个变量,使用格式化字符串:
(a, b, c, d, e, f, g, h) = unpack('HHHHHBBL', my_byte_array)
我希望(当我阅读 docs 时):
- a 到 e 将是一个 unsigned short(每个大小为 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?
感谢@jasonharper:
You have to start your struct
format string with one of the standard byte order/size/alignment indicators (usually <
or >
) in order to get any sort of cross-platform compatibility
我正在尝试 'unpack'(使用 Python 的结构模块)一个字节数组到多个变量,使用格式化字符串:
(a, b, c, d, e, f, g, h) = unpack('HHHHHBBL', my_byte_array)
我希望(当我阅读 docs 时):
- a 到 e 将是一个 unsigned short(每个大小为 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?
感谢@jasonharper:
You have to start your
struct
format string with one of the standard byte order/size/alignment indicators (usually<
or>
) in order to get any sort of cross-platform compatibility