2016-10-28 10 views
0

structの動作を理解しようとしていますか?struct.pack()内の任意のバイト値

私は2つの混乱を持っている:

構造体を引数と** kwargsからから*異なると**または*ですか?私は構造体をどこで使うべきですか?*と**はどこで使うべきですか?

私のコードは次のとおりです。私はそれをとても一般的な方法を開梱した後、それを読まなければならない

[115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119] 

です:誰かが私にこのコードを送信する場合

list(b'stackoverflow') 
[115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119] 

二疑いが想定される

>>> struct.pack(b'bbbbbbbbbbbbb',115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119) 

しかし、私は文章が長すぎると思います。私は多くの "bbbbbb"を引数として追加したくないと思います文章の長さを自動的に検出するものを使用できますか?何かのような

struct.pack(b'*magic',115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119) 

私たちはそれを行うことができますか?

答えて

1

structモジュールは引数渡しとは関係ありません。したがって、最初の部分で尋ねていることはわかりません。

2番目の質問には、その目的のためにstructを使用しないでください。何が欲しいのは少し整数のリストに対応するbytesオブジェクトであり、それが取得するのは非常に簡単です:

>>> somelist = [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119] 
>>> bytes(somelist) 
b'stackoverflow' 

あなたは、この目的のために代わりにstruct.packを使うことに決めているいくつかの理由で、これは最も簡単な場合にはway:

>>> struct.pack("b" * len(somelist), *somelist) 
b'stackoverflow' 
+0

私は*と**を意味していましたが、struct packとunpackを使用する場合は、パッキングとアンパックにも使用しますか? –

+0

2人だけを繰り返すことは、お互いに関係がありません。あなたは彼らが想像することによってあなた自身を混乱させるでしょう;-) 'struct'は低レベルの機械表現にデータを詰め込むことに関するものです;引数を渡す仕掛けは、はるかに高いレベルにあります。 –

+0

私はこれを試してみましたが、私は実際にこのようになっていたと思っていましたが、もっと簡単にstruct.pack( "b" * len(somelist)、111、112、97、115) " –

関連する問題