在python中将字母数字字符串转换为int,反之亦然

时间:2015-03-13 07:12:11

标签: python

我正在尝试将最大长度为40个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地从数据库中保存和检索。我不知道是否存在任何python方法或我们可以使用的任何简单算法。具体来说,我的字符串只有0-9和a-g字符。如此友好地帮助我们如何从字符串唯一地转换为int,反之亦然。我在Cent os 6.5上使用Python 2.7

3 个答案:

答案 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)

您的输入中有17个符号,因此您可以将其视为基数为17的数字:

>>> int('aga0',17)
53924

对于逆向转换,有许多解决方案超过here

答案 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