2013-05-15 45 views
1

我想打包一個字節後跟一長。我的緩衝區只能包含9個元素。爲什麼我不能將它們打包到緩衝區中?python struct.pack()/ calcsize()

>>> from struct import * 
>>> calcsize('qB') 
9 
>>> calcsize('Bq') 
12 

它返回的方式不同。爲什麼是這樣?

我使用Python 2.7.3的方式。

回答

1

在第二個示例中,struct.calcsize假定字節後有3個字節的填充,以便long long可以從4字節的邊界開始。

如果未指定填充,你會看到他們是等價的:

>>> calcsize ('Bq') 
12 
>>> calcsize('=Bq') 
9 
+0

啊哈!謝謝你,看來你是對的。我沒有意識到Python默認情況下不能使用本地大小。 – Jon

+0

'struct'使用原生大小,字節順序和對齊方式,除非您指定明確的字節順序,在這種情況下使用標準大小和不使用對齊方式。有關詳細信息,請參閱[文檔](http://docs.python.org/3.2/library/struct.html#byte-order-size-and-alignment)。 – chepner