快速提问。我正在尝试在 Python 中查找或编写一个编码器,以使用大写和小写字母来缩短一串数字。数字字符串看起来像这样:
20120425161608678259146181504021022591461815040210220120425161608667
长度总是一样的。
我最初的想法是编写一些简单的编码器来利用大小写字母和数字将此字符串缩短为看起来更像这样的内容:
a26Dkd38JK
这完全是武断的,只是想尽可能清楚。 我确信有一种非常巧妙的方法可以做到这一点,可能已经内置了。也许这是一个令人尴尬的问题。
另外,我需要能够将缩短的字符串转换回较长的数值。 我应该写一些东西并发布代码,还是这是我应该已经知道的内置 Python 函数的一行?
谢谢!
最佳答案
这是一个很好的压缩:
import base64
def num_to_alpha(num):
num = hex(num)[2:].rstrip("L")
if len(num) % 2:
num = "0" + num
return base64.b64encode(num.decode('hex'))
它首先将整数转换为字节串,然后对其进行 base64 编码。这是解码器:
def alpha_to_num(alpha):
num_bytes = base64.b64decode(alpha)
return int(num_bytes.encode('hex'), 16)
例子:
>>> num_to_alpha(20120425161608678259146181504021022591461815040210220120425161608667)
'vw4LUVm4Ea3fMnoTkHzNOlP6Z7eUAkHNdZjN2w=='
>>> alpha_to_num('vw4LUVm4Ea3fMnoTkHzNOlP6Z7eUAkHNdZjN2w==')
20120425161608678259146181504021022591461815040210220120425161608667
关于python - 将数字字符串编码为缩短的字母数字字符串,然后再返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10326118/