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