0

初心者の質問かもしれませんが、TCP 経由でデータを受信して​​おり、文字列を見ると次のようになります。

\x00\r\xeb\x00\x00\x00\x00\x01t\x00

その\r文字とは何ですか? tinとは\x01tどういう意味ですか?

ググってみたけど何をググればいいのかわからない…

ありがとう。

4

3 に答える 3

9

\rはキャリッジ リターン (0x0d)、tt.

于 2010-10-11T14:04:29.707 に答える
4

バイナリ データを文字列で表示すると、特に文字列が長い場合、混乱することがありますが、いつでも読みやすい 16 進数に変換できます。

>>> data = '\x00\r\xeb\x00\x00\x00\x00\x01t\x00'
>>> ' '.join(["%02X" % ord(char) for char in data])
'00 0D EB 00 00 00 00 01 74 00'

また、バイト文字列をフィールドに解析するだけの場合は、文字列を無視して、structモジュールで展開するだけです。

>>> import struct
>>> length, command, eggs, spam = struct.unpack('!BBi4s',data)
>>> #...whatever your fields really are
>>> print "len: %i\ncmd: %i\negg qty: %i\nspam flavor: '%s'" % (
...     length, command, eggs, spam)
len: 0
cmd: 13
egg qty: -352321536
spam flavor: ' ☺t '
于 2010-10-11T15:08:18.897 に答える
2

データを文字列として表示する場合、印刷可能な文字('t'などは文字として表示され、既知の制御シーケンスはエスケープとして表示され、その他のバイトは\ x ##形式で表示されます。例:

>>> s='\x74\x0d\x99'
>>> s
't\r\x99'

次のコマンドで16進形式をダンプできます。

>>> import binascii
>>> binascii.hexlify(s)
'740d99'
于 2010-10-11T16:28:18.140 に答える