Python防止从我的Var中删除反斜杠时将HEX解码为ASCII

时间:2019-03-06 18:24:44

标签: python

我想从变量中删除一些不需要的符号。在这种情况下,符号为反斜杠。我使用的是十六进制数字,作为示例,我将在下面展示一些简短的简单代码。但是我不希望python将我的HEX转换为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

2 个答案:

答案 0 :(得分:1)

您的代码中有两个问题。

首先是简单的一个: 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'

答案 1 :(得分:1)

变量中没有反斜杠:

>>> 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"-> {{1} }),然后十六进制(49),最后剥离第一个字符:

"0x31"