如何从此十六进制字符串中输出以十六进制打印?
应该在每行上打印到字节,如
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
答案 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