0

我有这个字符串"\x00\x12\xf8\x05\x74\xa2",结果如下:

>>> s = "\x00\x12\xf8\x05\x74\xa2"
>>> s
'\x00\x12\xf8\x05t\xa2'
>>> print s
?t?
>>> print repr(s)
'\x00\x12\xf8\x05t\xa2'


>>> s = r"\x00\x12\xf8\x05\x74\xa2" <=== (I want this result but cannot use r'')
>>> s
'\\x00\\x12\\xf8\\x05\\x74\\xa2'
>>> print s
\x00\x12\xf8\x05\x74\xa2

您可以看到字符串中的 已在前半部分输出中自动'\x74'转换为相应的 utf8 字符。't'我实际上有一个定制的字典来进行解码,所以我不想要这种自动转换。

如果我可以保持字符串与r'string'后半部分输出相同,那将是最好的。清楚地repr不行,有没有别的办法呢?

更新:我想要这个,因为我需要将hhevery\xhh转换为 int 数。

提前致谢。

4

3 回答 3

3

更新:我想要这个,因为我需要将每个 \xhh 中的 hh 转换为 int 数。

>>> s = "\x00\x12\xf8\x05\x74\xa2"
>>> [ord(x) for x in list(s)]
[0, 18, 248, 5, 116, 162]
于 2012-08-13T16:44:39.170 回答
3

我想要这个,因为我需要将每个 \xhh 中的 hh 转换为 int 数。

In [17]: s = "\x00\x12\xf8\x05\x74\xa2"

In [18]: list(bytearray(s))
Out[18]: [0, 18, 248, 5, 116, 162]

您可能会对这篇关于字节数组用途的文章感兴趣。

于 2012-08-13T16:45:16.237 回答
1

您可以像这样手动创建所需的表示:

>>> s = '\x00\x12\xf8\x05\x74\xa2'
>>> r = ''.join(['\\x%02x' % ord(b) for b in s])
>>> r
'\\x00\\x12\\xf8\\x05\\x74\\xa2'
>>> print r
\x00\x12\xf8\x05\x74\xa2

根据您的更新,如果您只想要这些ord值,请撕掉我原始答案的一小部分:

>>> [ord(b) for b in s]
[0, 18, 248, 5, 116, 162]
于 2012-08-13T16:40:15.567 回答