我的代码是
十六进制查看器.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