python - Python 的打包二进制数据大小在平台之间有何差异?

标签 python multiplatform

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

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

我期望(当我阅读 docs 时):

  • ae 将是一个无符号短整型(每个大小为 2 个字节)
  • fg 将是一个 无符号字符(每个大小为 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/

相关文章:

python - 从列表中删除正则表达式元素

python - python实现鼠标画圆圈的方法

python - seaborn 中的非透明置信区间

python - 如何在 Python 3.7+ 中使用 argparse 传递日期?

c++ - 如何在 C/C++ 中开发独立于平台的电子书阅读器?

api - Web API 设计技巧

python - 如何使用numpy计算向量滚动窗口的相关系数?

ios - 如何开发一个同时支持iOS和OS X的框架?

java - install4j 多平台版本问题

java - 针对各种处理器架构的 native 库位置的最佳实践命名策略