我有以下字符串,其中包含转义的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来发布更新,并意识到我的问题已经得到解答。
由于
答案 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