2017-01-02 2 views
-1

構造体を使用して文字列と数値をパックしたいと思います。 私はフォーマットが10バイトのために'10s 'であることを見たが、 しかし、私はいつも他の文字列の10分の1を書きたいと思う? と私はそれを言うことができません10.どのような形式で書く必要がありますか? この動的方法はありますか?アンパックの書き方を構造体のpython形式の文字列を動的に長さ

私は をGET-パケットのサイズがわからない場合だけで、それはint型int型と文字列..です :

packed=struct.pack('i10s',1,"abaBaabb"); 

おかげ

編集

id, data= struct.unpack_from('is' ,message,0) 

は1つの文字 を取得しますが、私は書く場合:

id, data= struct.unpack_from('i500s' ,message,0) 

私はそれが500バイトまでとなることを知っているので、 文字列が小さければエラーになります。

どうすればよいですか? 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ abcabcabcabcabcabcabcabcabcabcabcabc abcabcabcabcabcabcabcabcabcabcabcabc

または - どのように私は、次の0 \ 00 \ 00のリードを得ることができます\ 00 \ 0 ¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00 ¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00¥00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00

このような文字列がある場合は、

答えて

1

最も簡単には、その場でフォーマット文字列を計算することである。

struct.pack("%ss" % 3, "xyz") 

foo = "bar" 
struct.pack("%ss" % len(foo), foo) 
+0

はあなたに感謝!後でアンパックから特定の価値を得ることができますか? myStr = 'afgf' packed = struct.pack( 'i%ss'%len(myStr)、1、myStr); print 'packed'、packed print struct.unpack( '%ss'%len(myStr)、packed)ので、別のファイルに解凍したものから '1'番号を取得します。 – ABC

+0

ヘッダを追加メッセージサイズに基づいて文字列サイズを計算することができます。 –

関連する問題