Mam ten ciąg "\x00\x12\xf8\x05\x74\xa2" i następujący wynik:

>>> 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

Widać, że '\x74' w ciągu jest przekształcany w odpowiednią znak UTF8 't' automatycznie w pierwszej połowie wyjściowej. Właściwie mam dostosowany słownik, aby wykonywać dekodowanie, więc nie chcę tej auto konwersji.

Najlepiej byłoby, gdybym mógł zachować ciąg taki sam jak r'string' w drugiej połowy wyjściu. Wyraźnie repr nie działa, czy istnieje inny sposób, aby to zrobić?

Aktualizacja: Chcę tego, ponieważ muszę konwertować hh w każdym \xhh do numeru int.

Z góry dziękuję.

0
Yulong 13 sierpień 2012, 20:32

3 odpowiedzi

Najlepsza odpowiedź

Aktualizacja: Chcę tego, ponieważ muszę przekonwertować HH w każdej liczbie x.

>>> s = "\x00\x12\xf8\x05\x74\xa2"
>>> [ord(x) for x in list(s)]
[0, 18, 248, 5, 116, 162]
3
Esailija 13 sierpień 2012, 16:44

Chcę tego, ponieważ muszę przekonwertować HH w każdym, XHH na numer int.

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

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

Ten artykuł w stosunku do zastosowań dla bytearrays może być interesujący ty.

3
unutbu 13 sierpień 2012, 16:45

Możesz ręcznie stworzyć pożądaną reprezentację:

>>> 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

Za twoją aktualizację, jeśli po prostu chcesz wartości ord, wyrusz małą część mojej oryginalnej odpowiedzi:

>>> [ord(b) for b in s]
[0, 18, 248, 5, 116, 162]
1
zigg 13 sierpień 2012, 16:55