2011-01-03 24 views
0

pythonでstructモジュールを使用する2.4.3なぜcalcsize( "!BHB")とcalcsize( "BHB")に違いがありますか?それにより; ときなぜcalcsize( "!BHB")とcalcsize( "BHB")に違いがありますか?

from struct import * 
calcsize("!BHB") == 4 
calcsize("BHB") == 5 

私はビッグエンディアンとリトルエンディアンの概念を理解しますが、実際に上記のフォーマットのためのバイトの配置の面でそれを得ることはありません。

+0

いくつかの工夫をして、「BH」が4と「!BHは」3.「HB」ですが、しかし、3そこで問題は、おそらく「なぜcalcsize( 『BH』)==に簡素化することができますされていることを観察しました4? – Sapph

+0

Pythonのstdlibからモジュールを使用していますが、質問するときは、どのモジュールについて話しているかを明確にする必要があります。あなたが使用している "struct"モジュールは言語仕様の一部ではありません。あなたが何を話しているかを知るにはいくつかの困難があります。 – jsbueno

+0

私が意図したもの。しかし、視聴者が短い文字を自分自身でテストできるように余分なキャラクターを置くという考えは、私を勝ち取る。 - チョー – Choe

答えて

5

その理由はPython Docsで説明されていて、混合組織のメンバー(BHB)

  1. パディングのみ自動的に連続した構造部材の間に追加されたを使用しているときには、パディングの問題によるものです。 エンコードされた構造体の先頭または末尾にパディングは追加されません。非ネイティブサイズとアライメントを使用したときなしパディングが追加されていない

  2. 、 例えば'<'、 '>'、 '='、 '!'を使用します。

はこれを参照してください:

>>> struct.pack("BHB",1,1,1) 
'\x01\x00\x01\x00\x01' 
>>> struct.pack("=BHB",1,1,1) 
'\x01\x01\x00\x01' 

を最初のケースでは、パディングは、それがデフォルトのネイティブサイズとアライメントを使用していたので、バイトに追加され、あなたが明示的に「=」を使用して、それの標準的なサイズを設定して、パディングは行われなかった。

関連する問題