简体   繁体   中英

converting alphanumeric string to int and vice versa in python

I am trying to convert alphanumeric string with maximum length of 40 characters to an integer as small as possible so that we can easily save and retrieve from database. I am not aware if there is any python method existing for it or any simple algorithms we can use. To be specific my string will have only characters 0-9 and ag. So kindly help with any suggestions on how we can uniquely convert from string to int and vice versa. I am using Python 2.7 on Cent os 6.5

This is not that difficult:

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

Example:

>>> chars = "".join(str(n) for n in range(10)) + "abcdefg"
>>> str2int("0235abg02", chars)
14354195089
>>> int2str(_, chars)
'0235abg02'

Basically if you want to encode n characters into an integer you interpret it as base-n .

There are 17 symbols in your input, so you can treat is as a base-17 number:

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

For the reverse conversion, there are lots of solutions over here .

Improving on the above answers:

# 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)"

Can handle strings with leading 0s:

def strToNumber(numStr):
  num = 0
  for i, c in enumerate(reversed(numStr)):
    num += chars.index(c) * (charsLen ** i)

  return num

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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