youtube等网站的ID使用完整的字符范围来制作ID,例如dQw4w9WgXcQ。我想知道如何通过选择一个数字并使用像这样的全部基本字符将其转换为压缩数字来完成这项工作。
A&GT b取代; c取代; d取代; e基ect> azy> azz> aAa> aAb
我已经用javascript编写了这个内容,因为我是如何实现的,它是嵌入式循环通过一系列可能的字符。我真的希望我不需要再这样做,但我能以有效的方式找到的最好的是int到hex,但是hex不能涵盖我需要的全部字符。
答案 0 :(得分:1)
这可能与您的想法非常接近:
def int_to_string_fns(chars):
num_chars = len(chars)
char_to_i = dict((c,i) for i, c in enumerate(chars))
# create 2 functions for the given characters,
# one to convert an int to a string, and one to
# convert a string back to the corresponding int
def _to_string(i, minsize=0):
pad = []
ret = []
if minsize:
maxval = num_chars ** (minsize-1)
while maxval > max(i, 1):
pad.append(chars[0])
maxval /= num_chars
if i > 0:
while i:
i, c = divmod(i, num_chars)
ret.append(chars[c])
else:
ret.append(chars[0])
return ''.join(pad + ret[::-1])
def _from_string(s):
mult = num_chars
ret = 0
for c in s:
ret *= mult
ret += char_to_i[c]
return ret
return _to_string, _from_string
enc,dec = int_to_string_fns("ABCDEFGHIJKLMNOP")
print(enc(100))
print(dec("GE"))
for i in range(100,110):
print(i, enc(i), dec(enc(i)))
打印
GE
100
100 GE 100
101 GF 101
102 GG 102
103 GH 103
104 GI 104
105 GJ 105
106 GK 106
107 GL 107
108 GM 108
109 GN 109