0

我的代码是

十六进制查看器.py:

def hex_viewer(filename):
    data = open(filename,"rb").read()
    listofhex = map(lambda x: b"%02X" % ord(x),data)
    listofchar = map(lambda x: "%s" % x,data)
    print "\n".join(["{0}\t{1}".format(" ".join(listofhex[x:x+10])," ".join(listofchar[x:x+10])  ) for x in xrange(0,len(listofhex),10)]  )
hex_viewer("hexviewer.txt")

和我的源文件

hexviewer.txt:

hello 
world

我认为应该是

68 65 6C 6C 6F 20 0D 0A 77 6F   h e l l o   \r \n w o
72 6C 64                        r l d

但输出是

68 65 6C 6C 6F 20 0D 0A 77 6F   h e l l o   

 w o
72 6C 64    r l d

我究竟做错了什么?

编辑: 对不起,我尝试编辑我的代码

listofchar = map(lambda x: "%s" % x,data)

这里

listofchar = map(lambda x: repr(r"%s") % x,data)

但输出是`

68 65 6C 6C 6F 20 0D 0A 77 6F   'h' 'e' 'l' 'l' 'o' ' ' '
' '
' 'w' 'o'
72 6C 64    'r' 'l' 'd'

我试试

import re
listofchar = map(lambda x: re.escape(r"%s") % x,data)

输出

68 65 6C 6C 6F 20 0D 0A 77 6F   \h \e \l \l \o \  \
\
\w \o
72 6C 64    \r \l \d

我试试

listofchar = map(lambda x: r"%s".replace("\\","\\\\") % x,data)

输出是

68 65 6C 6C 6F 20 0D 0A 77 6F   h e l l o   

 w o
72 6C 64    r l d

还有很多方法,但我忘记了

对不起T^T

4

1 回答 1

0

您需要的是一种方法来单独保留普通字符,而只对特殊字符进行编码。

listofchar = map(lambda x: x.encode('unicode-escape'), data)

请注意,您可以使用列表推导代替,map这是执行此操作的首选方式。

listofchar = [x.encode('unicode-escape') for x in data]
于 2013-10-12T16:16:27.960 回答