您的位置:首页 > 编程语言

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

2012-04-03 10:21 375 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: