struct pack返回太长

Del*_*ela 7 python struct pack

我正在尝试使用该struct.pack功能

import struct
values = (0, 44)
s = struct.Struct('HI')
b = s.pack(*values)
print(b)
print(str(len(b)))
Run Code Online (Sandbox Code Playgroud)

它给了我这个输出:

b'\x00\x00\x00\x00,\x00\x00\x00'
8
Run Code Online (Sandbox Code Playgroud)

python文档说:

Format - C Type         - Python type - Standard size - Notes

H      - unsigned short - integer     - 2             - (3)

I      - unsigned int   - integer     - 4             - (3)
Run Code Online (Sandbox Code Playgroud)

所以len()应该是2 + 4 = 6,我需要大小= 6的字节

有任何想法吗?

我在Windows 10上使用Python 3.6

Luc*_*cas 4

pack将添加填充字节,以便第二个整数是 4 字节对齐的。从文档中:

默认情况下,打包给定 C 结构体的结果包括填充字节,以便保持所涉及的 C 类型的正确对齐;要...省略隐式填充字节,请使用标准大小和对齐方式而不是本机大小和对齐方式:有关详细信息,请参阅字节顺序、大小和对齐方式

  • 这给了我答案,应该使用 `struct.Struct('=HI')`、`struct.Struct('<HI')` 或 `struct.Struct('>HI')`, (3认同)