Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python struct.pack是否比其部件长?_Python_Binary_Pack - Fatal编程技术网

Python struct.pack是否比其部件长?

Python struct.pack是否比其部件长?,python,binary,pack,Python,Binary,Pack,我想解包6个值:2*UInt16,1*UInt32,1*UInt16,2*Int64 把字节数加起来,我得到26 但python似乎认为应该是32: >>> a = struct.pack("H",0) >>> len(a) 2 <-- correct >>> a = struct.pack("L",0) >>> len(a) 4 <-- correct >>> a = struct.pack(

我想解包6个值:2*
UInt16
,1*
UInt32
,1*
UInt16
,2*
Int64

把字节数加起来,我得到26

但python似乎认为应该是32:

>>> a = struct.pack("H",0)
>>> len(a)
2 <-- correct
>>> a = struct.pack("L",0)
>>> len(a)
4 <-- correct
>>> a = struct.pack("q",0)
>>> len(a)
8 <-- correct
>>> a = struct.pack("HHLHqq",0,0,0,0,0,0)
>>> len(a)
32 < -- should be 2 + 2 + 4 + 2 + 8 + 8 = 26 
>>> a = struct.pack("HHLHq",0,0,0,0,0)
>>> len(a)
24 < -- should be 2 + 2 + 4 + 2 + 8 = 18
>>> a = struct.pack("HHLH",0,0,0,0)
>>> len(a)
10 <-- correct again
>a=struct.pack(“H”,0)
>>>len(a)
2>>a=struct.pack(“L”,0)
>>>len(a)
4>>a=struct.pack(“q”,0)
>>>len(a)
8>>a=struct.pack(“hhlhq”,0,0,0,0,0)
>>>len(a)
32<--应为2+2+4+2+8+8=26
>>>a=结构包(“HHLHq”,0,0,0,0)
>>>len(a)
24<--应为2+2+4+2+8=18
>>>a=结构包(“HHLH”,0,0,0)
>>>len(a)
10根据:

使用非本机大小和对齐方式(例如使用“”、“=”和“!”)时,不会添加填充

因此,您只需指定endianness,填充将消失:

>>> import struct
>>> len(struct.pack("HHLHqq",0,0,0,0,0,0))
40
>>> len(struct.pack("<HHLHqq",0,0,0,0,0,0))
26
>>> 
导入结构 >>>len(结构包(“HHLHqq”,0,0,0,0,0)) 40
>>>len(struct.pack)(“谢谢,这很有帮助。但是为什么在不指定endianness时添加了填充呢?文档还说对于AMD64(我正在使用)来说,默认值应该已经是little endian了。@user3696412处理器使用的endianness不重要。如果显式指定或不指定,python的工作方式会有所不同。