Python hex从套接字转换为ascii

2024-10-01 19:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我相信这有一个简单的答案,问题是在谷歌中正确措辞,以得到我似乎可以做的答案。我正在从一个套接字得到一个原始数据包。在

pkt=sock.recv(2048)
'\x00\x00\x12\x00.H\x00\x00\x00\x02l\t\xa0\x00\xb3\x01\x00\x00'

上面是radiotap,如您所见,有几个字节被转换成ascii,即“.”、“H”、“t”。如何获得十六进制值,使其显示:

^{pr2}$

Tags: 答案字节ascii数据包sockxa0x00x01
3条回答

当以十六进制形式显示字符串时,我通常使用如下方法:

>>> def tohexstr(s):
...     return ''.join('%02x' % ord(c) for c in s)
...
>>> tohexstr('1 2 3 a b c')
'3120322033206120622063'

如果您经常这样做,您可能希望子类str并重写__repr__方法:

^{pr2}$

尝试使用不同的字节分隔符,看看什么适合您,例如:

>>> 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

您在这里看到的只是一个可读的字符串表示。实际上,\x00是一个字节,即空字节。H也是一个字节,它的值是0x48(正如您已经写过的)。在

如果您立即打印该字符串,您将只看到可打印字符;che控制字符将被执行。在

如果你想要一个全值的十六进制表示,你可能想这样做

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)

由于recv()返回一个字符串,您可以执行以下操作:

pkt=sock.recv(2048)
# pkt = "1234567890" # uncomment to test

for i in pkt:
    print hex(ord(i))

相关问题 更多 >

    热门问题