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

Convert string with escaped characters and ASCII values into HEX

本文关键字:字符串 转换 十六进制 ASCII 转义字符      更新时间:2023-09-26

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

"'01B'2E'00   k'00"

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

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

最终结果:

"'01'42'2E'00'20'20'20'6B'00"

::编辑::

我尝试了以下方法:

s = "'01B'2E'00   k'00"
r = [ ]
for x in s:
    r.append(x.encode("hex"))
print r

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

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

谢谢

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

>>> 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)

>>> escaped = s.replace('''', '''x').decode('string-escape')
>>> escaped
''x01B.'x00   k'x00'
>>> print escaped
B.   k

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

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

>>> 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 中已弃用。您可以改用binascii .hexlify.unhexlify方法。

您可以使用

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