2013-05-15 3 views
1

바이트를 패킹하고 long을 뒤에 넣고 싶습니다. 내 버퍼에는 9 개의 요소 만 포함될 수 있습니다. 왜 그들을 버퍼에 넣을 수 없습니까?파이썬 struct.pack()/calcsize()

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

이렇게 다른 결과가 반환됩니다. 왜 이런거야?

나는 파이썬 2.7.3을 사용하고 있습니다.

답변

1

두 번째 예제에서 struct.calcsize은 바이트 뒤에 3 바이트의 패딩을 가정하므로 long long은 4 바이트 경계에서 시작할 수 있습니다.

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

아하 : 당신이 패딩을 지정하지 않으면

, 당신은 그들이 동일 보자! 고마워, 네 말이 맞는 것 같아. 파이썬이 기본적으로 기본 크기를 사용할 수 없다는 것을 알지 못했습니다. – Jon

+0

'struct'는 명시 적 바이트 순서를 지정하지 않는 한 네이티브 크기, 바이트 순서 및 정렬을 사용합니다.이 경우 표준 크기 및 정렬이 사용되지 않습니다. 자세한 내용은 [the docs] (http://docs.python.org/3.2/library/struct.html#byte-order-size-and-alignment)를 참조하십시오. – chepner