纯十六进制形式的Python字符串

时间:2014-07-29 05:26:32

标签: python

>>> x = "\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3"
>>> x
'U\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x081\xdb1\xd2\x8a\x1c\x08\x01\xdaA\x83\xf9ru\xf5\x81\xfaqq\x00\x00t"\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9z\xa0\x04\x08\xba\n\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9p\xa0\x04\x08\xba\t\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80]\xc3'

有没有什么方法可以让解释器打印出x,就像我输入的那样?即它应该以{{1​​}}开头,而不是\x55

2 个答案:

答案 0 :(得分:3)

是的,在引号前添加r

x = r"\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3"
print x

<强>输出

\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3

答案 1 :(得分:1)

要使用原始值x准确获得所需内容,请编写显示功能:

>>> x = "\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3"
>>> x
'U\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x081\xdb1\xd2\x8a\x1c\x08\x01\xdaA\x83\xf9ru\xf5\x81\xfaqq\x00\x00t"\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9z\xa0\x04\x08\xba\n\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9p\xa0\x04\x08\xba\t\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80]\xc3'
>>> def display(x):
...     return "'\\x"+'\\x'.join(format(ord(n),'02x') for n in x)+"'"
... 
>>> print display(x)
'\x55\x89\xe5\xb9\x00\x00\x00\x00\xb8\xc0\xa0\x04\x08\x31\xdb\x31\xd2\x8a\x1c\x08\x01\xda\x41\x83\xf9\x72\x75\xf5\x81\xfa\x71\x71\x00\x00\x74\x22\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7a\xa0\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x70\xa0\x04\x08\xba\x09\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\x5d\xc3'

如果您只想要一个十六进制转储,这里是一个标准库函数,格式略有不同:

>>> import binascii
>>> binascii.hexlify(x)
'5589e5b900000000b8c0a0040831db31d28a1c0801da4183f97275f581fa717100007422b804000000bb01000000b97aa00408ba0a000000cd80b801000000bb00000000cd80b804000000bb01000000b970a00408ba09000000cd80b801000000bb00000000cd805dc3'