如何将 '\x' 转义字符串转换为相应单个字符的列表?

How do I convert a '\x'-escaped string into a list of the corresponding individual characters?

我有这样表示的 ASCII 字符字符串:

'\xaa\xaa\x02\xba\x04A\xaa\xaa\x02\xbc\x05>\xaa\xaa\x04\x80\x02\xf8\x00\x85\xaa\xaa\x04\x80\x02\xf8'

我想将这些字符串转换为列表,其中列表的每个元素都是一个 ASCII 字符,并且字符的顺序和值与原始字符串保持一致:

['\xaa', '\xaa', '\x02', '\xba', '\x04', 'A', '\xaa', '\xaa', '\x02', '\xbc', '\x05', '>', '\xaa', '\xaa', '\x04', '\x80', '\x02', '\xf8', '\x00', '\x85', '\xaa', '\xaa', '\x04', '\x80', '\x02', '\xf8']

如果每个字符都采用 \xa0 形式(表示一个十六进制字节),这不会太困难,但有时 ASCII 转义字符如 \n 换行符和 \包括反斜杠。这抛出了我写的转换器方法。

是否有一个简单的内置函数可以满足我的需求?或者有什么包可以下载吗?或者有人有简单的代码解决方案吗?

您似乎拥有的字符串包含另一个字符串的 Python 表示形式。一种解码方法是使用 codecs.decode() with the unicode_escape encoding:

>>> s = '\xaa\xaa\x02\xba\x04A\xaa\xaa\x02\xbc\x05 ... \x02\xf8'
>>> import codecs
>>> t = codecs.decode(s, 'unicode_escape')
>>> t
'ªª\x02º\x04Aªª\x02¼\x05 ... \x02ø'

请注意,虽然可打印的非 ASCII 字符在这里按原样表示,而不是 \xNN 转义,但它们在字面上与那些转义相同:

>>> 'ª' is '\xaa'
True

一旦你有了解码后的字符串 t,将它转换成列表就很简单了:

>>> list(t)
['ª', 'ª', '\x02', 'º', '\x04', 'A', 'ª', 'ª', '\x02', '¼', '\x05', ..., '\x02', 'ø']

但是:我不禁想知道为什么你首先需要解码这个字符串。在很多情况下传递 repr(some_string) 的结果是有意义的,所以你可能有一个 XY Problem。您应该首先考虑不生成这些 repr-strings 是否更有意义。