如何从十六进制字符串中获取输出以十六进制打印?

时间:2015-08-28 16:58:51

标签: python hex

如何从此十六进制字符串中输出以十六进制打印?

应该在每行上打印到字节,如

31c0
5068
etc

以下是代码:

$ cat hex.py 
#!/usr/bin/python

hexstr = ("\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80")

x=bytearray(hexstr)

for i in xrange(0,len(x),2):
  print format(x[i:i+2]).decode('hex')

这是我得到的错误:

$ python  hex.py
Traceback (most recent call last):
  File "hex.py", line 8, in <module>
    print format(x[i:i+2]).decode('hex')
  File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
    output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found

1 个答案:

答案 0 :(得分:2)

您没有十六进制字符串。您有一个使用\xhh十六进制转义码定义的常规Python字符串。

如果您想将这些字节显示为十六进制,您只需使用hex编解码器对其进行编码:

>>> hexstr = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"
>>> hexstr.encode('hex')
'31c050682f2f7368682f62696e89e35089e25389e1b00bcd80'

另一种方法是使用binascii.hexlify() function获得相同的结果。

如果你需要在一个单独的行上的每个字节,只需循环字符串并编码单个字符(字节):

>>> for c in hexstr:
...     print c.encode('hex')
... 
31
c0
50
68
2f
2f
73
68
68
2f
62
69
6e
89
e3
50
89
e2
53
89
e1
b0
0b
cd
80