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

文字列内のinは、前半の出力で自動的に'\x74'対応するutf8文字に変換されることがわかります。't'私は実際にデコードを行うためにカスタマイズされた辞書を持っているので、この自動変換は必要ありません。

r'string'文字列を後半の出力と同じに保つことができれば最高です。明らかreprに機能しませんが、他に方法はありますか?

hh更新:すべて\xhhを整数に変換する必要があるため、これが必要です。

前もって感謝します。

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 に答える