Шестнадцатеричная строка в питоне
Здесь я хочу заменить # на \x, но когда я печатаю h, это не дает того же результата, когда я печатаю y.decode()
у кого-нибудь есть объяснение и решение для него?
s = "#53ule#69#6dan"
y = "\x53ule\x69\x6dan"
f = s.replace("#","\\x")
print f
h = f.decode()
print h
print y.decode()
2 ответа
\x
в y
не является действительным символом обратной косой черты, за которым следует x
характер, а скорее начало escape-последовательности.
Вся последовательность "\x53"
является "S"
(так как "S"
является 0x53
в ASCII). Так же, "\x69"
является "i"
а также "\x6d"
является "m"
,
Когда вы делаете свой replace
призыв к вычислению f
, вы не получаете escape-последовательность, а скорее символ обратной косой черты, за которым следует x
персонаж.
Я не уверен, что есть совершенно прямой способ перейти от шестнадцатеричной строки к обычной, но эта подстановка регулярных выражений добьется цели с некоторой помощью int
а также chr
:
re.sub("#(..)", lambda match: chr(int(match.group(1), 16)), s)
re.sub("#([A-Fa-f0-9]{2})",lambda m:unichr(int(m.groups()[0],16)),"#53ule#69#6dan")
может быть то, что вы ищете...