我正在尝试使用格式化字符串将字节数组“解包”(使用 Python 的 struct 模块)到多个变量:
(a, b, c, d, e, f, g, h) = unpack('HHHHHBBL', my_byte_array)
我期望(当我阅读 docs 时):
- a 到 e 将是一个无符号短整型(每个大小为 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?
最佳答案
谢谢@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
关于python - Python 的打包二进制数据大小在平台之间有何差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164136/