初心者の質問かもしれませんが、TCP 経由でデータを受信しており、文字列を見ると次のようになります。
\x00\r\xeb\x00\x00\x00\x00\x01t\x00
その\r
文字とは何ですか? t
inとは\x01t
どういう意味ですか?
ググってみたけど何をググればいいのかわからない…
ありがとう。
初心者の質問かもしれませんが、TCP 経由でデータを受信しており、文字列を見ると次のようになります。
\x00\r\xeb\x00\x00\x00\x00\x01t\x00
その\r
文字とは何ですか? t
inとは\x01t
どういう意味ですか?
ググってみたけど何をググればいいのかわからない…
ありがとう。
\r
はキャリッジ リターン (0x0d)、t
はt
.
バイナリ データを文字列で表示すると、特に文字列が長い場合、混乱することがありますが、いつでも読みやすい 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 '
データを文字列として表示する場合、印刷可能な文字('t'などは文字として表示され、既知の制御シーケンスはエスケープとして表示され、その他のバイトは\ x ##形式で表示されます。例:
>>> s='\x74\x0d\x99'
>>> s
't\r\x99'
次のコマンドで16進形式をダンプできます。
>>> import binascii
>>> binascii.hexlify(s)
'740d99'