2017-01-16 5 views
1

1バイト値、2バイト値、1バイト値、文字列など、複数のサイズのデータ​​をバインドしたい。 これは、単純なチャットクライアントによって送信されるパケットです。Cのデータ型をPythonに変換する

作成したいネットワークパケットは図の中にあります。 bodyに続いて合計4バイトのヘッダー。 enter image description here

どうすればこのパケットをPythonで作成できますか?

明示的にサイズを定義してデータを保存するソリューションはありますか?

答えて

3

あなたが探しているのはPython's structです。ここでは、structに求めているものを行う方法の例です:

from struct import * 
header = pack('!chcs', clientID, bodySize, networkMessageId, body) 

headerはそれにそのパケットを持つことになりますし、あなたがネットワーク経由で送信することができます(または、あなたがそれを行う必要があるものは何でも)。

あなたのイメージは「ネットワーク」と書いてあるので、これはネットワークバイトオーダーである必要があると私は考えています。つまり、最初は!です。

+0

ありがとうございます! しかし、どのようにパックのメンバーのサイズを定義できますか? 特に、私はボディサイズに2バイトの値を格納したい –

+0

私がリンクしている 'struct'のドキュメントを参照してください([ここにテーブルに直接ジャンプしてください](https://docs.python.org/2/library/struct .html#format-characters))。 'pack'に与えられた文字列の文字がサイズを指定します。 'c'は1バイトを意味し、' h'は短い整数を意味し、短い整数はPythonの定義によって2バイトです。 's'は文字列を意味します。 –

+0

文字列 '!chcs'は文字通り次のようになります:"ネットワークバイトオーダーの次のパラメータをサイズが1バイト、2バイト、1バイト、および文字列の配列に入れる "。 'clientID'、' networkMessageId'などの名前を作ったので、あなたが送るデータでそれらを置き換えなければならないことに注意してください。 –

関連する問題