将包含十六进制的字符串拆分为单独的值

时间:2016-05-12 21:21:55

标签: python string list split hex

我有这样的十六进制字符串:

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以外的任何东西(导致大多数'空白'字符)失败并出现错误。任何人都可以提出一种方法来获得理想的结果吗?

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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]