将带有转义字符和 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=]