我正在尝试将最大长度为40个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地从数据库中保存和检索。我不知道是否存在任何python方法或我们可以使用的任何简单算法。具体来说,我的字符串只有0-9和a-g字符。如此友好地帮助我们如何从字符串唯一地转换为int,反之亦然。我在Cent os 6.5上使用Python 2.7
答案 0 :(得分:2)
这并不困难:
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'
基本上,如果您想将 n 字符编码为整数,则将其解释为 base-n 。
答案 1 :(得分:1)
答案 2 :(得分:0)
改善以上答案:
# The location of a character in the string matters.
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
charsLen = len(self.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