将带有转义字符和ASCII值的字符串转换为HEX

时间:2015-01-11 07:32:57

标签: javascript python string

我有以下字符串,其中包含转义的HEX值和ASCII字符

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

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

目标是将整个字符串转换为所有HEX值

最终结果:

"\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

问题是值(ex:\ 1E)被解释为\ x01和E

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

由于

2 个答案:

答案 0 :(得分:1)

这是一个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)

>>> 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方法。

答案 1 :(得分:1)

您可以使用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