Mercurial > hg > config
comparison python/base_encode.py @ 729:fc4749433229
https://gist.github.com/adyliu/4494223
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Wed, 10 Dec 2014 10:08:31 -0800 |
| parents | |
| children | 9c2a18033128 |
comparison
equal
deleted
inserted
replaced
| 728:6ba565f99696 | 729:fc4749433229 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 #-*- coding:utf-8 -*- | |
| 3 # Base62 tools (convert number <=> string) | |
| 4 # v1.0/20130109 | |
| 5 # python 2.x/3.x supported | |
| 6 # | |
| 7 #author: Ady Liu(imxylz@gmail.com) | |
| 8 #github: github.com/adyliu | |
| 9 | |
| 10 import sys | |
| 11 | |
| 12 basedigits='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | |
| 13 BASE=len(basedigits) | |
| 14 | |
| 15 | |
| 16 def decode(s): | |
| 17 ret,mult = 0,1 | |
| 18 for c in reversed(s): | |
| 19 ret += mult*basedigits.index(c) | |
| 20 mult *= BASE | |
| 21 return ret | |
| 22 | |
| 23 def encode(num): | |
| 24 if num <0: raise Exception("positive number "+num) | |
| 25 if num ==0: return '0' | |
| 26 ret='' | |
| 27 while num != 0: | |
| 28 ret = (basedigits[num%BASE])+ret | |
| 29 num = int(num/BASE) | |
| 30 return ret | |
| 31 | |
| 32 | |
| 33 if __name__ == '__main__': | |
| 34 if len(sys.argv) < 2: | |
| 35 print("Usage: base62.py <num>...") | |
| 36 sys.exit(1) | |
| 37 width = max(len(x) for x in sys.argv[1:]) | |
| 38 for argv in sys.argv[1:]: | |
| 39 try: | |
| 40 num = int(argv) | |
| 41 print('%*s %s %s' % (width,argv,'ENCODE',encode(num))) | |
| 42 except ValueError: | |
| 43 print('%*s %s %s' % (width,argv,'DECODE',decode(argv))) |
