[英]Python prevent decoding HEX to ASCII while removing backslashes from my Var
我想從變量中刪除一些不需要的符號。 在這種情況下,符號為反斜杠。 我使用的是十六進制數字,作為示例,我將在下面展示一些簡短的簡單代碼。 但是我不希望python將我的HEX轉換為ASCII,如何防止這種情況發生? 我有一些很長的外殼代碼供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
您的代碼中有兩個問題。
首先是簡單的一個: 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"
將為您提供帶一個字符的字符串-換行符-並且沒有反斜杠。 有關這些語法的完整語法,請參見字符串文字文檔 。
現在,如果您真的想用這樣的反斜杠寫字符串,可以使用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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.