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
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
相关文章推荐
- 转帖:c#任意进制转换(2-36进制之间的转换)
- 任意进制之间的转换问题 !!!非常nb的代码哦!!
- C语言实现任意进制的转换,主要注意代码的小技巧
- 编程实现36进制和10进制之间的相互转换
- Python 正整数任意进制互转换代码示例
- 设计算法把一个十进制的整数转换成二至九进制之间的任意进制输出
- 进制之间的转换(java代码实现)
- 通用进制转换工具,可实现进制之间的任意转换
- 进制之间互相转换代码
- POJ 1131 Octal Fractions 任意进制之间小数的转换
- 十六进制以内任意进制之间的转换
- 任意进制的转换(base2-base36)
- PHP常用函数:62进制转换及任意进制之间转换函数
- 【C语言】任意进制之间的转换(支持小数部分)
- 36进制与10进制之间的转换
- 通用进制转换工具,可实现进制之间的任意转换
- 大数的任意进制之间的转换(九度OJ题目1080)
- 转换成任意[2, 36]进制的字符串输出
- 将任意进制(2~36)的数转换为10进制,参数k=16就是16进制转10进制
- 任意进制(2-36)互相转换