2-36之间的任意进制之间转换的代码

Option Explicit

Private Function ValidChk(K As Long) As Boolean
    If K < 2 Or K > 36 Then
        MsgBox "由于编码符号的限制,进制只能设置为2-36"
    Else
        ValidChk = True
    End If
End Function

Private Function DecToAny(ByVal n As Long, K As Long) As String
    Dim m As Long
    Dim Asc0 As Long, Asc9 As Long, AscA As Long
    Dim c As Long
   
    If Not ValidChk(K) Then Exit Function
    Asc0 = Asc("0")
    AscA = Asc("A")
    Asc9 = Asc0 + 9
   
    While n > 0
        m = n Mod K
        If m > 9 Then
            c = AscA + m - 10
        Else
            c = Asc0 + m
        End If
        DecToAny = Chr(c) & DecToAny
        n = (n - m) / K
    Wend
End Function

Private Function AnyToDec(ByVal n As String, ByVal K As Long) As Long
    Dim m As Long
    Dim Kb As Long
    Dim B() As Byte
    Dim Asc0 As Long, Asc9 As Long, AscA As Long
    Dim i As Long
   
    If Not ValidChk(K) Then Exit Function
   
    Asc9 = Asc("9")
    AscA = Asc("A")
    Asc0 = Asc("0")
   
    B = StrConv(UCase(n), vbFromUnicode)
    Kb = 1
    For i = UBound(B) To 0 Step -1
        If B(i) > Asc9 Then
            m = B(i) - AscA + 10
        Else
            m = B(i) - Asc0
        End If
       
       
        AnyToDec = AnyToDec + m * Kb
        Kb = Kb * K
    Next
End Function


Private Sub Text1_Change()
    If IsNumeric(Text1) And IsNumeric(Text3) Then
        Text2 = DecToAny(Text1, Text3)
    End If
End Sub

Private Sub Text4_Change()
    If IsNumeric(Text6) Then
        Text5 = AnyToDec(Text4, Text6)
    End If
End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值