2-36进制之间的随意转换函数

来源:互联网 发布:淘宝怎么添加全屏海报 编辑:程序博客网 时间:2024/05/20 11:31

'------------------------------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

原创粉丝点击