将带有转义字符和 ASCII 值的字符串转换为 HEX
Convert string with escaped characters and ASCII values into HEX
我有以下字符串,其中包含转义的 HEX 值和 ASCII 字符
"BE[=10=] k[=10=]"
反斜杠表示接下来的两个字符是十六进制值,字符串中的所有其他字符都是 ASCII
目标是将整个字符串转换成所有十六进制值
最终结果:
"E[=11=]B[=11=]"
::编辑::
我试过以下方法:
s = "BE[=12=] k[=12=]"
r = [ ]
for x in s:
r.append(x.encode("hex"))
print r
问题是值(例如:\1E)被解释为 \x01 和 E
然后我 运行 进入下面的问题 online 来到 post 更新,并意识到我的问题已经回答了。
谢谢
这是一个 Python 字符串,其中包含转义的十六进制值和 ASCII 字符。
>>> s = r"BE[=10=] k[=10=]"
>>> s
'\01B\2E\00 k\00'
>>> print(s)
BE[=10=] k[=10=]
首先,我们使用 string-escape
编解码器解码,将转义的十六进制值转换为字符表示形式。为了将 string-escape
与十六进制值一起使用,我们需要使用 \x
作为转义指示符,而不仅仅是 \
(这意味着八进制值 iirc)
>>> escaped = s.replace('\', '\x').decode('string-escape')
>>> escaped
'\x01B.\x00 k\x00'
>>> print escaped
B. k
我们的一些字符不可打印。但是结果是我们所有的字符都是十六进制的values/characters.
如果要转换 转义十六进制表示法 中的所有字符,但是,您需要显式转换为十六进制值:
>>> h = ''.join('\' + char.encode('hex') for char in escaped)
>>> h
'\01\42\2e\00\20\20\20\6b\00'
>>> print h
e[=12=]b[=12=]
请注意,字节到字节编码在 Python3 中已弃用。您可以改用 binascii
.hexlify
和 .unhexlify
方法。
您可以使用 re.split()
来标记 Python 中的字符串:
>>> import re
>>> data = r"BE[=10=] k[=10=]"
>>> L = re.split(r'((?:\{hex}{hex})+)'.format(hex='[0-9a-fA-F]'), data)
>>> L
['', '\01', 'B', '\2E\00', ' k', '\00', '']
>>> L[::2] = [''.join('\' + c.encode('hex') for c in s) for s in L[::2]]
>>> print ''.join(L)
E[=10=]b[=10=]
我有以下字符串,其中包含转义的 HEX 值和 ASCII 字符
"BE[=10=] k[=10=]"
反斜杠表示接下来的两个字符是十六进制值,字符串中的所有其他字符都是 ASCII
目标是将整个字符串转换成所有十六进制值
最终结果:
"E[=11=]B[=11=]"
::编辑::
我试过以下方法:
s = "BE[=12=] k[=12=]"
r = [ ]
for x in s:
r.append(x.encode("hex"))
print r
问题是值(例如:\1E)被解释为 \x01 和 E
然后我 运行 进入下面的问题 online 来到 post 更新,并意识到我的问题已经回答了。
谢谢
这是一个 Python 字符串,其中包含转义的十六进制值和 ASCII 字符。
>>> s = r"BE[=10=] k[=10=]"
>>> s
'\01B\2E\00 k\00'
>>> print(s)
BE[=10=] k[=10=]
首先,我们使用 string-escape
编解码器解码,将转义的十六进制值转换为字符表示形式。为了将 string-escape
与十六进制值一起使用,我们需要使用 \x
作为转义指示符,而不仅仅是 \
(这意味着八进制值 iirc)
>>> escaped = s.replace('\', '\x').decode('string-escape')
>>> escaped
'\x01B.\x00 k\x00'
>>> print escaped
B. k
我们的一些字符不可打印。但是结果是我们所有的字符都是十六进制的values/characters.
如果要转换 转义十六进制表示法 中的所有字符,但是,您需要显式转换为十六进制值:
>>> h = ''.join('\' + char.encode('hex') for char in escaped)
>>> h
'\01\42\2e\00\20\20\20\6b\00'
>>> print h
e[=12=]b[=12=]
请注意,字节到字节编码在 Python3 中已弃用。您可以改用 binascii
.hexlify
和 .unhexlify
方法。
您可以使用 re.split()
来标记 Python 中的字符串:
>>> import re
>>> data = r"BE[=10=] k[=10=]"
>>> L = re.split(r'((?:\{hex}{hex})+)'.format(hex='[0-9a-fA-F]'), data)
>>> L
['', '\01', 'B', '\2E\00', ' k', '\00', '']
>>> L[::2] = [''.join('\' + c.encode('hex') for c in s) for s in L[::2]]
>>> print ''.join(L)
E[=10=]b[=10=]