我的代码是
hexviewer.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
答案 0 :(得分:0)
您需要的是一种单独保留普通字符但只编码特殊字符的方法。
listofchar = map(lambda x: x.encode('unicode-escape'), data)
请注意,您可以使用列表推导而不是map
,这是首选方法。
listofchar = [x.encode('unicode-escape') for x in data]