2016-05-12 21 views
0

我有这样的十六进制的字符串:拆分包含十六进制字符串转换成单独的值

s = "\x08\x00\x00\x00\x00\x00\x00\xefn\x15\x01\x00\x00\x00\x00\x10\x02l\t\xa0\x00\xf2\x00\x00\x00\xf2\x00" 

,我想单独值的列表,像

['\x08', '\x00', etc]['08', '00', '00', etc]

我尝试s.split()字符串失败

s.split('\x')结果ValueError: invalid \x escape

s.split('\\x')导致 ['\x08\x00\x00\x00\x00\x00\x00\xefn\x15\x01\x00\x00\x00\x00\x10\x02l\t\xa0\x00\xf2\x00\x00\x00\xf2\x00']

任何试图通过串和隐蔽每个“字符”为int或大于STR(其导致主要“空白”字符)未能通过错误的任何其他迭代。任何人都可以提出一种方法来获得理想的结果吗?

回答

4

每个\xhh项目是字符串中一个字节。

Python正在显示一个字符串表示,这是一个字符串文字符号,可以安全地复制并粘贴到任何ASCII上下文中以重建相同的值。因此,任何非ASCII代码点都由一个转义序列表示,其中绝大多数由十六进制转义表示为\xhh十六进制转义符。例如,您会注意到制表符使用\t转义序列。字符串中没有实际的\x字符,因此无法在'\\x'上分割。

您可以通过刚好路过字符串list()将此转换为单个字符的列表:

>>> s = "\x08\x00\x00\x00\x00\x00\x00\xefn\x15\x01\x00\x00\x00\x00\x10\x02l\t\xa0\x00\xf2\x00\x00\x00\xf2\x00" 
>>> list(s) 
['\x08', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\xef', 'n', '\x15', '\x01', '\x00', '\x00', '\x00', '\x00', '\x10', '\x02', 'l', '\t', '\xa0', '\x00', '\xf2', '\x00', '\x00', '\x00', '\xf2', '\x00'] 
2
s = "\x08\x00\x00\x00\x00\x00\x00\xefn\x15\x01\x00\x00\x00\x00\x10\x02l\t\xa0\x00\xf2\x00\x00\x00\xf2\x00" 

print(list(bytearray(s))) 
[8, 0, 0, 0, 0, 0, 0, 239, 110, 21, 1, 0, 0, 0, 0, 16, 2, 108, 9, 160, 0, 242, 0, 0, 0, 242, 0] 
+0

为什么ByteArray的? –

+1

因为我推测OP想要整数,即*任何试图遍历字符串和每个'字符'转换为int *,obvioulsy他们可以调用列表,如果他们不 –

+1

我认为这是一个尝试获得所需的输出。我们拭目以待! :-) –

相关问题