Dom*_*mra 216
ASCII到int:
ord('a')
Run Code Online (Sandbox Code Playgroud)
给 97
并回到一个字符串:
str(unichr(97))str(chr(97))给 'a'
如果多个字符绑定在一个整数/长整数内,那么我的问题是:
s = '0123456789'
nchars = len(s)
# string to int or long. Type depends on nchars
x = sum(ord(s[byte])<<8*(nchars-byte-1) for byte in range(nchars))
# int or long to string
''.join(chr((x>>8*(nchars-byte-1))&0xFF) for byte in range(nchars))
Run Code Online (Sandbox Code Playgroud)
产量'0123456789'和x = 227581098929683594426425L
BASE58编码URL怎么样?比如flickr就好.
# note the missing lowercase L and the zero etc.
BASE58 = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
url = ''
while node_id >= 58:
div, mod = divmod(node_id, 58)
url = BASE58[mod] + url
node_id = int(div)
return 'http://short.com/%s' % BASE58[node_id] + url
Run Code Online (Sandbox Code Playgroud)
把它转回一个数字也不是什么大问题.
使用hex(id)[2:]和int(urlpart, 16). 还有其他选择。Base32 编码你的 id 也可以工作,但我不知道有任何库可以在 Python 中内置 Base32 编码。
显然,Python 2.4 中引入了 base32 编码器和base64 模块。您可以尝试使用b32encode和b32decode。您应该提供True和casefold选项map01,b32decode以防人们写下您缩短的 URL。
事实上,我收回那句话。我仍然认为 base32 编码是一个好主意,但该模块对于 URL 缩短的情况没有用。您可以查看模块中的实现,并针对此特定情况自行实现。:-)