2016-10-03 10 views
1

pythonのドキュメントによると、pythonのsocket recv()メソッドは 'byte'型の配列を返します。あなたはこの配列をプリントアウトした場合soc.recvは正確に何を返しますか?

はしかし、バイトのように見えないものも表示されます。

\xd9\x01\x01\xa4\xe9\xcbV6\x15\xed|>g5\xfa\xbd\xe9Q\[email protected]\x18\xff\ 

はPythonのバイトオブジェクトはいくつかの内部エラー報告か何かを持っていますか?実際のバイトが返されていないように見えるこれらのバイトオブジェクトは何ですか?

いくつかのより多くの奇妙な例:

\x00w\xd4\x04;\x9c\x0b}>P]\xa4\xbd\xa5n:9x\xe3>9\xd2/~8\ 

\x01\x01\x1b ,Y\x00\x00\x00\x00\x00\xf4 

\xa0A\n\xd7tB}\xed,\xc0\x00\ 

答えて

1

recv線量が実際に生のバイトを返します。 PythonバイトがASCIIエンコーディングを仮定しているのは、印刷時だけです。値がASCII印刷可能な値に収まる場合は、その8ビット値で表されるASCII文字として印刷されます。 ASCII印刷可能でない場合、値は\xでエスケープされ、16進数が出力されます。

python 3.5を使用している場合は、上記のバイトで.hexを呼び出して、16進数値が何であるかを確認できます。これはあなたが期待している値を得ていることを確認するはずです。

あなたが送信する値がWiresharkなどを使用して期待するものであることを自由に確認してください。これは印刷されている場合にのみ表示されます。

+0

したがって、ASCIIエンコーディング内にない場合でも、バイトオブジェクト自体(印刷されていない)は適切な値を持ちますが、正しいですか? – user1519665

+0

はい、値がASCIIで印刷可能でない場合は、単に16進値 '\ x'を返します。 Wiresharkのようなもので実際にワイヤーを通過するものを見ると、値はあなたが期待しているものであることがわかります。これは、単にpythonがこれらをどのように出力するかの人工物に過ぎません。 – shuttle87

+0

申し訳ありません、ありがとうございます。うまくいけば、ロジックの残りの部分は正しく動作します。 – user1519665

関連する問題