original = '\xff\xab\x12'
result = original.replace('\\x', '')
print result
Это \x
, потому что он сбежал. a.replace(b,c)
просто заменяет все события b
c
в a
.
Что вы хотите, это не ascii, потому что ascii переводит 0x41 в 'A'. Вы просто хотите его в шестнадцатеричной базе без \ x (или 0x, в некоторых случаях)
Редактировать !!
Извините, я думал, что \ x скрыт. Таким образом, \ х следуют 2 шестнадцатеричных цифр представляет один символ, а не 4 ..
print "\x41"
Напечатает
Так что мы должны сделать, чтобы преобразовать каждый обугливается в шестнадцатеричном, а затем распечатать его так:
res = ""
for i in original:
res += hex(ord(i))[2:].zfill(2)
print res
Теперь давайте на эту линию:
hex(ord(i))[2:]
ord(c)
- возвращает числовое значение полукокса c
hex(i)
- возвращает строковое шестнадцатеричное значение в Int i
(например, если i=65
он вернется 0x41
.
[2:]
- вырезание префикса «0x» из шестнадцатеричной строки.
.zfill(2)
- заполнение нулями
Таким образом, делая это с список понимание будет намного короче:
result = "".join([hex(ord(c))[2:].zfill(2) for c in original])
print result
Какие версию Python вы используете? –
@JonClements 2.7.3 –