我的问题是如果信息可能在此过程中丢失,如何检索原始字符串。 我正在审查一个使用字节移位的编码例程,如下所示:
def encode(string):
encoded = ''
for char in string:
encoded += chr(ord(char) ^ (ord(char) >> 1))
return encoded
如果向右移动一位,在某些情况下我会丢失信息,但我正在尝试找出一种方法来重建原始字符串,使得
def decode(string):
decoded = ''
for char in string:
decoded += ........
return decoded
因为我正在丢失给定字符列表的信息:
In [90]: ord('A') >> 1 << 1
Out[90]: 64
In [91]: ord('B') >> 1 << 1
Out[91]: 66
In [92]: ord('C') >> 1 << 1
Out[92]: 66
是否可以反转编码后的字符串?我已经思考了一段时间,我觉得这是可以做到的,但我的大脑似乎卡在了这里。
最佳答案
Michael 的回答证明了这是可能的,这里有一个简单且可能快速的方法,使用反向查找表(这里只做 ASCII):
def decode(string):
return string.translate({i ^ i>>1: i for i in range(128)})
演示:
>>> encode('StackOverflow')
'zNQR^hMWKUZXL'
>>> decode(encode('StackOverflow'))
'StackOverflow'
还有一个证明它有效的简单实验证明:
>>> len({i ^ i>>1 for i in range(128)})
128
128 种可能的输入会导致 128 种不同的输出,因此不会将两个不同的字符编码为相同的字符,因此可以逆向进行该过程。
关于python - 使用字节移位解码编码的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47844555/