在Scapy中,我获取了几个数据包的前28个字节,并将每个数据包保存为十六进制字符串。每当我想要将这些字符串打印在一起时(它们保存在列表中),就会发生以下情况:
>>> print myStrings[0]
['E\x00\x00W\x00\x00@\x00\x01\x11\xe7-\x8a`t\x86\xd5\x92\xbd\xef0\x1a\xa4\xe8\x00C\xe2k', ['E\x00\x00W\x00\x00@\x00\x01\x11\xe7-\x8a`t\x86\xd5\x92\xbd\xef0\x1a\xa4\xe8\x00C\xe2k']]
但是如果我想分别打印每个字符串:
>>> for p in tmpStrAns:
... print p[0]
...
EW@�-�`t�Ւ��0��C�k
E8@�L�`t�Ւ��0��$�L
E8@�L�`t�Ւ��0��$�L
(MyStrings
是一个列表清单:[[string1, [string2,string3,...], ...]
)
这里发生了什么?
答案 0 :(得分:2)
打印列表时,Python会调用list.__str__
,在每个项目上调用repr
。
打印字符串时,Python直接输出字符串。
>>> print "\x11"
�
>>> print ["\x11"]
['\x11']
>>> print repr("\x11")
'\x11'
字符串上的repr
方法将不可打印的字符转换为十六进制表示。