Python 结构体长度不正确

shr*_*nde 1 python struct python-2.7

python 结构的几个问题。请让我知道什么是正确的。

  1. 文档提到 l/L 的长度为 4,但是当使用 calcsize 检查时,它给出 8。

    >>> struct.calcsize('l')
    8
    
    Run Code Online (Sandbox Code Playgroud)
  2. struct module calcsize 给出了错误的大小。如果计算单个元素大小,其总和为 90,但与 calcsize 一起计算时,其结果为 92。

    >>> struct.calcsize('8s2sIII30s32s6s')
    92
    
    >>> struct.calcsize('8s')
    8
    
    >>> struct.calcsize('2s')
    2
    
    >>> struct.calcsize('III')
    12
    
    >>> struct.calcsize('30s')
    30
    
    >>> struct.calcsize('32s')
    32
    
    >>> struct.calcsize('6s')
    6
    
    Run Code Online (Sandbox Code Playgroud)

shr*_*nde 5

详细阐述 jonrsharpe 在评论中发布的答案。

\n\n
    \n
  1. \xe2\x80\x98Standard size\xe2\x80\x99 列是指使用标准大小时打包值的大小(以字节为单位);也就是说,当格式字符串以 '<'、'>'、'!' 之一开头时 或“=”。使用本机大小时,打包值的大小取决于平台。

    \n\n
    >>> struct.calcsize('l')\n8\n\n>>> struct.calcsize('=l')\n4\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
  3. 因为有垫子。使用 = 不使用填充。

    \n\n
    >>> struct.calcsize('=8s2sIII30s32s6s')\n90\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
\n