2012-02-17 3 views
0

私はmsgHdr+payloadという形式のネットワークメッセージを持っています。 msgHdrには、ロングカップルとショーツカップルがあります。ペイロードは可変長テキストです。私は、パックドバイナリストリームを送ることができるように、どのようにStructをフォーマットするのか分かりません。Python 3.1 - バイナリパックされたメッセージ可変長データを送信

単一のメッセージのフォーマットは、

s = struct.Struct('> L L I I 2110s') 
s.pack(*mystruct) # Then I pack it 

あるしかし、これが唯一の私は、可変長ペイロードのためにそれを使用するにはどうすればよい2110の固定サイズの文字列のために働きますか?何か他のものを使っているべきですか?

答えて

1

ヘッダーにstructを使用し、後でペイロードを追加してください。

message = struct.pack('> L L I I', *header) + payload 
+0

ありがとうございます!作品は魅力が好きです。 – shaks

0

あなたが(結局、である、単なる文字列)フォーマット文字列を作成し、あなたが説明するようにs.packでそれを使用することができますように思えます。

あなたの現在の構文が

s = struct.Struct('> L L I I 2110s') 
s.pack(*mystruct) 

であればあなたがする必要があるだろうすべてはそれが連結、その後、1つの構造体は、可変長部として最初のヘッダーを作成するのに役立つかもしれない

s = struct.Struct('> L L I I %ds' % size_of_data) 
s.pack(*mystruct) 

ですそれら。

関連する問題