不同平台的Python压缩二进制数据大小的差异?

2024-09-24 20:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

当我阅读docs时,我期望:

  • 一个e将是一个无符号短(每个大小为2字节)
  • fg将是一个无符号字符(每个大小为1字节)
  • h将是一个无符号长(大小为8字节)

当我在我的windows10机器上运行这个程序时,这正是我得到的。你知道吗

在我另外两台安装了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。我觉得很奇怪,这是怎么回事?你知道吗

我应该如何使用结构解包在多平台环境中?你知道吗


Tags: 模块字符串命令机器docs字节my符号
1条回答
网友
1楼 · 发布于 2024-09-24 20:27:51

感谢@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

相关问题 更多 >