python中的十六进制和字符串

2024-06-06 22:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,我想用\x替换# 但是当我打印h时,它不会给出与打印y时相同的结果

有人对此有解释和解决办法吗?你知道吗

    s = "#53ule#69#6dan"
y = "\x53ule\x69\x6dan"
f = s.replace("#","\\x")
print f
h = f.decode()
print h
print y.decode()

Tags: replaceprintdecode解决办法x69x53ulex6dan
2条回答

y中的\x不是后跟x字符的实际反斜杠字符,而是escape sequence的开头。你知道吗

整个序列"\x53""S"(因为"S"在ASCII中是0x53)。类似地,"\x69""i""\x6d""m"。你知道吗

当您执行replace调用来计算f时,不会得到转义序列,而是一个实际的反斜杠字符,后跟一个x字符。你知道吗

我不确定从十六进制字符串到常规字符串是否有一个完全直接的方法,但是这个正则表达式替换将在intchr的帮助下实现这一点:

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

可能就是你要找的。。。你知道吗

相关问题 更多 >