使用 Python 将十进制转换为 base 64 的最有效方法
most efficient way to convert decimal to base 64 using Python
将十进制转换为 base 64(URL 友好)并返回的最有效方法是什么。
我当前的代码,
import numpy as np
a = "-0123456789ABCDEFGHIJKLM64OPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
A = {k:i for i,k in enumerate(a)}
def dec_url(x:int, n:int=4):
o = []
for i in range(n):
m = x%(64**(i+1))
x -= m
o.append(a[m//(64**i)])
return ''.join(o[::-1])
def url_dec(s: str):
return np.sum(map(lambda i:A.get(i[1])*(64**(i[0])),enumerate(s[::-1])))
有更好的方法来编码可变长度整数,因此仅用于教育目的:
from functools import reduce
def dec_url(x:int, n:int=4):
o = []
while x:
x, m = divmod(x, 64)
o.append(a[m])
return ''.join(reversed(o))
def url_dec(s: str):
return reduce((lambda total, char: (total << 6) + A[char]), s, 0)
将十进制转换为 base 64(URL 友好)并返回的最有效方法是什么。
我当前的代码,
import numpy as np
a = "-0123456789ABCDEFGHIJKLM64OPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
A = {k:i for i,k in enumerate(a)}
def dec_url(x:int, n:int=4):
o = []
for i in range(n):
m = x%(64**(i+1))
x -= m
o.append(a[m//(64**i)])
return ''.join(o[::-1])
def url_dec(s: str):
return np.sum(map(lambda i:A.get(i[1])*(64**(i[0])),enumerate(s[::-1])))
有更好的方法来编码可变长度整数,因此仅用于教育目的:
from functools import reduce
def dec_url(x:int, n:int=4):
o = []
while x:
x, m = divmod(x, 64)
o.append(a[m])
return ''.join(reversed(o))
def url_dec(s: str):
return reduce((lambda total, char: (total << 6) + A[char]), s, 0)