繁体   English   中英

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

[英]converting alphanumeric string to int and vice versa in python

我正在尝试将最大长度为 40 个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地从数据库中保存和检索。 我不知道是否有任何可用的 python 方法或我们可以使用的任何简单算法。 具体来说,我的字符串将只有字符 0-9 和 ag。 因此,请就我们如何唯一地将字符串转换为整数(反之亦然)提出任何建议。 我在 Cent os 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'

基本上,如果您想将n 个字符编码为一个整数,您可以将其解释为base-n

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

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

对于反向转换,有很多解决方案在这里

改进上述答案:

# 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM