解码/恢复字符随python的变化



我有一个函数。输入将是一个单词,每次每个字符都会添加到结果的变化值中。

def magic2(b):
res = 0
    for c in b:
       res = (res << 8) + ord(c)
       print(res)
return res

因为它使用了变化,所以我会丢失一些数据。我想用输入单词的确切字母来解码/逆转。

例如,如果输入将是"萨曼",则输出为" 495555797358",而逐步将是:

115
29537
7561581
1935764833
495555797358

如何使用这些输出来回到输入单词?

考虑您在做什么:对于每个角色,您向左移动8位,然后再添加8位。 1

那么,您如何撤消?好吧,对于每个角色,您可以抓住最右边的8位,然后将其他所有内容移到8位。你怎么知道你何时完成?当右转到8位时,您的距离为0时,您一定只有最左边的角色。所以:

def unmagic2(n):
    while n > 0:
        c = chr(n & 0xff) # 0xff is (1 << 8) - 1
        n = n >> 8

现在,您只需要弄清楚如何处理每个c即可取回原始字符串。它不是最初想象的那样琐碎,因为我们最左边的角色持续了,而不是第一。但是您应该能够从这里弄清楚。


1。如果您使用的是Unicode的整个范围,那当然是有损的,因为您要乘8位向左移动,然后再增加21位,因此无法扭转这一点。但是我假设您在此处使用Latin-1字符串,或bytes - 或Python 2 str

最新更新