我正试图将最大长度为40个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地保存和检索数据库。 我不知道是否有任何现有的Python方法或任何简单的算法可供使用。 具体来说,我的字符串仅包含字符0-9和a-g。 因此,请提供任何建议,以便我们如何将字符串唯一地转换为整数,反之亦然。 我正在Centos 6.5上使用Python 2.7
我正试图将最大长度为40个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地保存和检索数据库。 我不知道是否有任何现有的Python方法或任何简单的算法可供使用。 具体来说,我的字符串仅包含字符0-9和a-g。 因此,请提供任何建议,以便我们如何将字符串唯一地转换为整数,反之亦然。 我正在Centos 6.5上使用Python 2.7
这并不难:
def str2int(s, chars):
i = 0
for c in reversed(s):
i *= len(chars)
i += chars.index(c)
return i
def int2str(i, chars):
s = ""
while i:
s += chars[i % len(chars)]
i //= len(chars)
return s
例子:
>>> chars = "".join(str(n) for n in range(10)) + "abcdefg"
>>> str2int("0235abg02", chars)
14354195089
>>> int2str(_, chars)
'0235abg02'
对以上回答进行改进:
最初的回答
# The location of a character in the string matters.
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
charsLen = len(chars)
def numberToStr(num):
s = ""
while num:
s = self.chars[num % charsLen] + s
num //= charsLen
return s # Or e.g. "s.zfill(10)"
能够处理带有前导0的字符串:
最初的回答
def strToNumber(numStr):
num = 0
for i, c in enumerate(reversed(numStr)):
num += chars.index(c) * (charsLen ** i)
return num
struct.pack
。 - cdarke