Python阻止将十六进制解码为ASCII,同时从my V中删除反斜杠

2024-03-29 14:07:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从变量中去掉一些不需要的符号。在这种情况下,符号是反斜杠。我使用的是一个十六进制数,作为一个例子,我将在下面展示一些简单的代码。但我不希望python将我的十六进制转换成ASCII,我该如何防止这种情况发生呢。?我有一些很长的shell代码供asm以后使用,它们非常长,手动删除\是一个很长的过程。我知道有不同的方法,比如使用echo -e "x\x\x\x" > output等,但我的整个脚本都将用python编写。 谢谢

>>> a = "\x31\xC0\x50\x68\x74\x76"
>>> b = a.strip("\\")
>>> print b
1�Phtv

>>> a = "\x31\x32\x33\x34\x35\x36"
>>> b = a.strip("\\")
>>> print b
123456

最后,我希望它打印我的var:

>>> print b
x31x32x33x34x35x36

Tags: 方法代码echo过程ascii符号情况手动
2条回答

代码中有两个问题

首先是一个简单的问题: strip()只删除一个引用。所以你应该使用replace("\\", "")。这将用“”替换每个反斜杠,这与删除它相同

第二个问题是带有反斜杠的Python行为:

要使示例正常工作,需要在字符串前面附加一个“r”,以指示它是原始字符串a = r"\x31\xC0\x50\x68\x74\x76"。在原始字符串中,反斜杠不会转义字符,而只是一个反斜杠

>>> r"\x31\xC0\x50\x68\x74\x76"
'\\x31\\xC0\\x50\\x68\\x74\\x76'

变量中没有反斜杠:

>>> a = "\x31\xC0\x50\x68\x74\x76"
>>> print(a)
1ÀPhtv

以换行符为例:用Python编写"\n"将为您提供一个字符换行符且没有反斜杠的字符串。请参阅string literals docs以获取这些语法的完整语法

现在,如果你真的想用这样的反斜杠来写字符串,你可以用r修饰符:

>>> a = r"\x31\xC0\x50\x68\x74\x76"
>>> print(a)
\x31\xC0\x50\x68\x74\x76
>>> print(a.replace('\\', ''))
x31xC0x50x68x74x76

但是,如果您想将常规字符串转换为十六进制编码的符号,可以逐个字符进行转换,将其转换为数字("\x31"="1">49),然后是十六进制("0x31"),最后剥离第一个字符:

>>> a = "\x31\xC0\x50\x68\x74\x76"
>>> print(''.join([hex(ord(x))[1:] for x in a]))
'x31xc0x50x68x74x76'

相关问题 更多 >