Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将字母数字字符串转换为int,反之亦然_Python - Fatal编程技术网

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

在python中将字母数字字符串转换为int,反之亦然,python,Python,我正在尝试将最大长度为40个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地从数据库中保存和检索。我不知道是否有任何python方法,或者我们可以使用的任何简单算法。具体来说,我的字符串将只有字符0-9和a-g。因此,如果您对如何将字符串唯一地转换为int以及如何将int唯一地转换为string有任何建议,请提供帮助。我在Cent os 6.5上使用Python 2.7,这并不难: def str2int(s, chars): i = 0 for c in rever

我正在尝试将最大长度为40个字符的字母数字字符串转换为尽可能小的整数,以便我们可以轻松地从数据库中保存和检索。我不知道是否有任何python方法,或者我们可以使用的任何简单算法。具体来说,我的字符串将只有字符0-9和a-g。因此,如果您对如何将字符串唯一地转换为int以及如何将int唯一地转换为string有任何建议,请提供帮助。我在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视为base-17数字:

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

对于反向转换,有很多解决方案。

改进了上述答案:

# 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

如何将字符转换为整数?作为一个整数,“a0b3”是什么?是否需要进行一些转换,例如,使用字符a-g的ASCII值?是否要从该字符串中选择数字或将整个字符串“序列化”为整数?后者肯定不起作用-对于40字节长的字符串肯定不起作用。。。另外,字符串可能是写入数据库的第二种最常见的数据类型-为什么要费心转换它呢?@TimBiegeleisen不一定,但只要我们可以轻松还原转换,一切都很好,希望这是清楚的,需要唯一映射您可能希望查看
struct.pack
如果需要编码的字符不是[0-9a-g]的直接扩展名,例如[0-9a-gz],并且不提供返回的方法,则会出现这种情况。很好,整数的大小似乎会随着字符串大小而快速增加,那么,你知道我们能得到的最大整数是多少吗?什么时候发生的?当我们拥有最多(可能是全部)字母、数字或其他任何东西时。你真的建议这样的转换而不是保存字符串本身吗?@RAFIQ对长度为n的任意字符串进行编码,字符集大小为c,其最大大小为c^n。这是一个信息论下限,不能加以改进。在我上面的示例中,当您只编码最后一个字符的字符串时,就会发生这种情况,例如“gggg”。我不会建议进行这种转换,除非您确定这样做会显著降低项目的硬件存储成本。s+=chars[I%len(chars)]->s=chars[I%len(chars)]+s