【问题标题】:Python struct format character sizes, why is it bigger than it should be?Python struct 格式字符大小,为什么它比它应该的大?
【发布时间】:2017-04-07 10:28:30
【问题描述】:

简单的问题,如果执行以下操作:

import struct
struct.calcsize("6cHcBHIIQ")

当我认为应该是 28 时返回 32。

通过执行以下操作(缺少 Q):

import struct
struct.calcsize("6cHcBHII")

它返回 20,这是我所期望的。

然后做:

import struct
struct.calcsize("Q")

返回 8,这是正确的。

为什么将 Q 添加到顶部会导致 12 个额外字节而不是 8 个?

Python 3,Windows 机器。

谢谢。

【问题讨论】:

  • 只是对这个问题的更新:同样的行为可以在 Ubuntu 14.04 上重现。

标签: python python-3.x struct binary


【解决方案1】:

对齐。详情请见https://docs.python.org/3/library/struct.html#struct-alignment

试试struct.calcsize("=6cHcBHIIQ")

【讨论】:

  • 谢谢,有道理!
【解决方案2】:

您还可以通过以更好的方式重新调整它们来最小化尺寸:

struct.calcsize("QIIHHB6cc")

yields 28,您通常应该期望填充是任何结构大小问题的罪魁祸首。请参阅 Why isn't sizeof for a struct equal to the sum of sizeof of each member? 以获得关于为什么结构大小有时可能比看起来更大的一个很好的答案。

【讨论】:

  • 谢谢。如果我正在从文件中解压缩字节,那么格式字符串需要按正确的顺序排列,但不是吗?
猜你喜欢
  • 2015-11-13
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2019-04-23
相关资源
最近更新 更多