也許這是一個noob問題,但我通過TCP接收的一些數據,當我看串,我得到以下幾點:非二進制(十六進制)字符收到了TCP與Python
\x00\r\xeb\x00\x00\x00\x00\x01t\x00
什麼是\r
字符?\x01t
中的t
是什麼意思?
我嘗試過谷歌搜索,但我不知道該怎麼爲谷歌...
感謝。
也許這是一個noob問題,但我通過TCP接收的一些數據,當我看串,我得到以下幾點:非二進制(十六進制)字符收到了TCP與Python
\x00\r\xeb\x00\x00\x00\x00\x01t\x00
什麼是\r
字符?\x01t
中的t
是什麼意思?
我嘗試過谷歌搜索,但我不知道該怎麼爲谷歌...
感謝。
查看字符串中的二進制數據有時可能會造成混淆,尤其是如果它們很長,但您始終可以將其轉換爲一些易於閱讀的十六進制。
>>> 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 '
\r
是回車(0x0d),t
是t
。
如果是這樣的話,爲什麼不把它簡單地作爲0x0d? – 2010-10-11 14:11:05
因爲有一個標準轉義,所以爲它指定'\ r'。搜索「C字符轉義」,你會發現他們如何表示的表格。 – Blrfl 2010-10-11 14:22:05
@nieldw Python將'bytes'對象表示爲標識每個字節的十六進制值的字符串,除非十六進制值是可打印/常用ASCII值的十六進制值。 – 2010-10-11 14:30:28
顯示數據時作爲字符串,可打印字符(如't'顯示爲字符,已知的控制序列顯示爲轉義字符,其他字節顯示在\ x ##表格中。例如:
>>> s='\x74\x0d\x99'
>>> s
't\r\x99'
你可以轉儲以十六進制形式:
>>> import binascii
>>> binascii.hexlify(s)
'740d99'
有什麼編碼? – 2010-10-11 14:03:41
看起來不像我能想到的任何編碼(一行中有四個NULL字節?)。看起來更像是二進制數據,我會說... – 2010-10-11 14:06:37
這是我從一個TCP服務器的流量模擬器得到的響應,我必須根據長度(第一個字節)和命令(第二個字節),那麼我怎麼解釋'r'和't'? – 2010-10-11 14:10:21