Python 2.7:如何防止从十六进制到字符串

时间:2016-05-21 04:10:35

标签: python string dns hex decode

我正在使用python套接字模块,玩我写的udp客户端。我不喜欢它如何处理我的十六进制文字。例如:

>>> querydns = '\xb9\x1b\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x77\x77\x77\x06\x67\x6f\x6f\x67\x6c\x65\x03\x63\x6f\x6d\x00\x00\x01\x00\x01'
>>> querydns
'\xb9\x1b\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x06google\x03com\x00\x00\x01\x00\x01'

>>> replydata
'\xb9\x1b\x81\x80\x00\x01\x00\x06\x00\x00\x00\x00\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xd4\x00\x04@\xe9\xb0j\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xd4\x00\x04@\xe9\xb0i\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xd4\x00\x04@\xe9\xb0\x93\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xd4\x00\x04@\xe9\xb0g\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xd4\x00\x04@\xe9\xb0h\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xd4\x00\x04@\xe9\xb0c'

注意它如何自动将一些十六进制解码为字符?我只想处理十六进制值,没有@s或www。有没有一种简单的方法来阻止这种自动解码?

2 个答案:

答案 0 :(得分:1)

你真的不能......你有几个选择(某种程度上)

import binascii
print binascii.hexlify(querydns)

或伪造它(保留前导零需要更多努力)......

print "".join("\\x%s"%(hex(ord(data_byte))[2:]) for data_byte in querydns)

或我认为可以合作的组合

hexy = binascii.hexlify(querydns)
print "".join("\\x%s"%hexy[i:i+2] for i in range(len(hexy)-1))

答案 1 :(得分:0)

您可以通过在字符串前加上“r”将其用作“原始”字符串。 原始字符串不由python处理,并按原样处理。

string = r"example string"