'------------------------------2-36进制之间的随意转换函数---------------------------------------
'也不知道有没有36进制,呵呵,可能是我自己编出来的吧。
'36进制概念,11相当与A,12相当与B,…………35相当与Z。只到在大写的A--Z之间。小写没加判断。
'到用的时候再加吧。时间关系,少写了很多的限制。
'感觉用来加密也不错。呵呵
'-----------------------------------------------------------------------------------------------
'x为需要转换的数,m为未转换以前的进制,n为转换后的进制
Function zh(x As String, m As Integer, n As Integer) As String
Dim temp As Long
Dim zht() As String
Dim total As Integer
Dim mmid As String
If n > 36 Then
MsgBox "本函数最多支持36进制的转换"
Exit Function
End If
If m = 10 Then
temp = CLng(x)
Do
total = total + 1
temp = Int(temp / n)
Loop Until temp = 0
ReDim zht(total)
temp = CLng(x)
total = 0
Do
total = total + 1
zht(total) = temp Mod n
temp = Int(temp / n)
Loop Until temp = 0
For I = total To 1 Step -1
zh = zh & sz(CStr(zht(I)))
Next I
Else
For I = Len(x) To 1 Step -1
mmid = Mid(x, Len(x) - I + 1, 1)
If mmid = "1" Or mmid = "2" Or mmid = "3" Or mmid = "4" Or mmid = "5" Or mmid = "6" Or mmid = "7" Or mmid = "8" Or mmid = "9" Then
total = total + CInt(mmid) * m ^ (I - 1)
Else
total = total + (Asc(mmid) - 55) * m ^ (I - 1)
End If
Next I
zh = zh(CStr(total), 10, n)
End If
End Function
'将大于9的数转换成A---Z
Function sz(y As String) As String
If CInt(y) > 9 Then
sz = Chr(CInt(y) + 55)
Else
sz = y
End If
End Function
Private Sub Command1_Click()
Dim b, c As Integer
Dim a As String
a = CStr(InputBox("输入要转换的数"))
b = CInt(InputBox("输入此数当前的进制状态"))
c = CInt(InputBox("输入转换后的进制状态"))
MsgBox CStr(b) + " 进制数:" + a + " 转换成 " + CStr(c) + "进制数为:" + zh(a, CInt(b), c)
End Sub