我确信这有一个简单的答案,问题是在谷歌中正确地表达它以获得我似乎可以做的答案。我从套接字获取一个原始数据包。
pkt=sock.recv(2048)
'\x00\x00\x12\x00.H\x00\x00\x00\x02l\t\xa0\x00\xb3\x01\x00\x00'
上面是radiotap,你可以看到,几个字节被转换为ascii,即'。','H','t'。如何获取十六进制值,使其显示为:
'\x00\x00\x12\x00\x2e\x48 ...'
答案 0 :(得分:2)
由于recv()返回一个字符串,你可以这样做:
pkt=sock.recv(2048)
# pkt = "1234567890" # uncomment to test
for i in pkt:
print hex(ord(i))
答案 1 :(得分:2)
在以十六进制格式显示字符串时,我通常会使用以下内容:
>>> def tohexstr(s):
... return ''.join('%02x' % ord(c) for c in s)
...
>>> tohexstr('1 2 3 a b c')
'3120322033206120622063'
如果你这么做很多,你可能希望继承str
并覆盖__repr__
方法:
>>> class hexstr(str):
... def __repr__(self):
... return ''.join('%02x' % ord(c) for c in self)
...
>>> hexstr('\x01\x02\x03\x30\x31abc')
0102033031616263
使用不同的字节分隔符来查看对您有用的内容,例如:
>>> s = 'abc123'
>>> print ''.join('\\x%02x' % ord(c) for c in s)
\x61\x62\x63\x31\x32\x33
>>> print '-'.join('%02x' % ord(c) for c in s)
61-62-63-31-32-33
答案 2 :(得分:2)
您在此处看到的只是一个可读的字符串表示。实际上,\x00
是一个字节,即空字节。 H
也是一个字节,它的值为0x48(正如您已经写过的那样)。
如果您立即打印该字符串,您只会看到可打印的字符;控制字符将被执行。
如果你想要一个全值十六进制表示,你可能想要
print pkt.encode('hex') # at least under Py2
print " ".join("%02x" % ord(i) for i in pkt)
print "\x" + "\x".join("%02x" % ord(i) for i in pkt)
答案 3 :(得分:0)
我认为这些是你得到的数字。注意:
In [24]: aaa = '\x00\x00\x12\x00\x2E\x48\x00\x02'
In [25]: aaa
Out[25]: '\x00\x00\x12\x00.H\x00\x02'