首先说说62进制的表达方式: 0-9依然延续10进制的0-9表达,然后是小写的字母a-z,再大写的字母A-Z 即35[10进制]=z[62进制];61[10进制]=Z[62进制]; 因为带字母,因此定义以字符串形式输入 #coding=gbk
def f(nx,x1,x):
#n为待转换的十进制数,x为机制,取值为2-62
a=['0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k',
'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K',
'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
nx=str(nx)
b1=list(nx)
print (nx,"[",x1,"]==[",x,"] ",end='')
b2=[]
for i in b1:
for i1 in range(0,62):
if a[i1]==i:
b2=b2 [i1]
if i1>x1:
print (i,"错误定义")
b2.reverse()
#print(b2)
n1=0
n2=1
for i in b2:
n1=n1 int(i)*(pow(x1,n2-1)) #pow(x, n),即计算 x 的 n 次幂函数
n2=n2 1
#print (n1,n2)
n=n1
#print(n)
b=[]
while True:
s=n//x#商
y=n%x#余数
b=b [y]
if s==0:
break
n=s
b.reverse() #reverse() 函数用于反向列表中元素,由个,十百转为百十个
bd=""
for i in b:
#print(a[i],end='')
bd=bd a[i]
print (bd)
return bd
chun='zF4mOFpN7A'
print (chun)
print (f(chun[0:2],62,10) f(chun[2:6],62,10) f(chun[6:11],62,10))
for i in range(0,62):
f(str(i),10,62)
#F(str,str的进制,需要转换的进制)
运行结果如下: zF4mOFpN7A zF [ 62 ][ 10 ] 2211 4mOF [ 62 ][ 10 ] 1041021 pN7A [ 62 ][ 10 ] 6147026 221110410216147026 0 [ 10 ][ 62 ] 0 1 [ 10 ][ 62 ] 1 2 [ 10 ][ 62 ] 2 3 [ 10 ][ 62 ] 3 4 [ 10 ][ 62 ] 4 5 [ 10 ][ 62 ] 5 6 [ 10 ][ 62 ] 6 7 [ 10 ][ 62 ] 7 8 [ 10 ][ 62 ] 8 9 [ 10 ][ 62 ] 9 10 [ 10 ][ 62 ] a 11 [ 10 ][ 62 ] b 12 [ 10 ][ 62 ] c 13 [ 10 ][ 62 ] d 14 [ 10 ][ 62 ] e 15 [ 10 ][ 62 ] f 16 [ 10 ][ 62 ] g 17 [ 10 ][ 62 ] h 18 [ 10 ][ 62 ] i 19 [ 10 ][ 62 ] j 20 [ 10 ][ 62 ] k 21 [ 10 ][ 62 ] l 22 [ 10 ][ 62 ] m 23 [ 10 ][ 62 ] n 24 [ 10 ][ 62 ] o 25 [ 10 ][ 62 ] p 26 [ 10 ][ 62 ] q 27 [ 10 ][ 62 ] r 28 [ 10 ][ 62 ] s 29 [ 10 ][ 62 ] t 30 [ 10 ][ 62 ] u 31 [ 10 ][ 62 ] v 32 [ 10 ][ 62 ] w 33 [ 10 ][ 62 ] x 34 [ 10 ][ 62 ] y 35 [ 10 ][ 62 ] z 36 [ 10 ][ 62 ] A 37 [ 10 ][ 62 ] B 38 [ 10 ][ 62 ] C 39 [ 10 ][ 62 ] D 40 [ 10 ][ 62 ] E 41 [ 10 ][ 62 ] F 42 [ 10 ][ 62 ] G 43 [ 10 ][ 62 ] H 44 [ 10 ][ 62 ] I 45 [ 10 ][ 62 ] J 46 [ 10 ][ 62 ] K 47 [ 10 ][ 62 ] L 48 [ 10 ][ 62 ] M 49 [ 10 ][ 62 ] N 50 [ 10 ][ 62 ] O 51 [ 10 ][ 62 ] P 52 [ 10 ][ 62 ] Q 53 [ 10 ][ 62 ] R 54 [ 10 ][ 62 ] S 55 [ 10 ][ 62 ] T 56 [ 10 ][ 62 ] U 57 [ 10 ][ 62 ] V 58 [ 10 ][ 62 ] W 59 [ 10 ][ 62 ] X 60 [ 10 ][ 62 ] Y 61 [ 10 ]==[ 62 ] Z 用法如下:f(str,str的进制,需要转换的进制),如f(‘zf’,62,16)即表示62进制的zf,转化为16进制的表达数 程序的扩展: 只要把a[]中的list扩展字符即可,如可使用的汉字’壹’,‘甲乙丙丁’,'子丑寅卯’都可以。
|