将带转义字符和ASCII值的字符串转换为十六进制

2024-04-25 04:27:08 发布

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

我有以下字符串,其中包含转义的十六进制值和ASCII字符

"\01B\2E\00   k\00"

反斜杠表示接下来的两个字符是十六进制值,字符串中的其他字符都是ASCII

目标是将整个字符串转换成所有十六进制值

最终结果:

^{pr2}$

::编辑::

我试过以下方法:

s = "\01B\2E\00   k\00"
r = [ ]

for x in s:
    r.append(x.encode("hex"))

print r

问题是这些值(例如:\1E)被解释为\x01和E

然后我遇到了下面的问题online来发布更新,并意识到我的问题已经得到了回答。在

谢谢


Tags: 方法字符串in编辑目标forascii字符
2条回答

这是一个Python字符串,它包含转义的十六进制值和ascii字符。在

>>> s = r"\01B\2E\00   k\00"
>>> s
'\\01B\\2E\\00   k\\00'
>>> print(s)
\01B\2E\00   k\00

首先我们用string-escape编解码器解码,将转义的十六进制值转换成字符表示。为了将string-escape与十六进制值一起使用,我们需要使用\x作为转义指示符,而不仅仅是\(这意味着八进制值iirc)

^{pr2}$

我们的一些字符不可打印。但结果是我们所有的字符都是十六进制值/字符。在

但是,如果要转换转义十六进制表示中的所有字符,则需要将其显式转换为十六进制值:

>>> h = ''.join('\\' + char.encode('hex') for char in escaped)
>>> h
'\\01\\42\\2e\\00\\20\\20\\20\\6b\\00'
>>> print h
\01\42\2e\00\20\20\20\6b\00

请注意,在Python3中不推荐使用字节到字节编码。而是使用^{}.hexlify和{}方法。在

您可以使用re.split()在Python中标记字符串:

>>> import re
>>> data = r"\01B\2E\00   k\00"
>>> 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)
\01\42\2E\00\20\20\20\6b\00

相关问题 更多 >