babala 2007-3-10 22:46
如何进行二进制到六十二进制向十进制的转换?
新手来看:如何进行二进制到六十二进制向十进制的转换?《函数》
如何进行2进制到62进制的转换?
10进制转16进制用 HEX 函数,那么倒过来哪?
十六进制转十进制用什么函数?
babala 2007-3-10 22:47
不需要函数,请参考以下代码:
[table=98%][tr][td]Dim x As Double
x = "&H" & "a1"
Debug.Print x[/td][/tr][/table]
可以用以下函数:
[table=98%][tr][td]Private Function C16To10(strA As String) As Double
Dim a As Double
Dim b As String
Dim c As Double
Dim l As Integer
Dim i As Long
l = Len(strA)
For i = 1 To l
b = Mid(strA, i, 1)
Select Case b
Case "A"
b = 10
Case "B"
b = 11
Case "C"
b = 12
Case "D"
b = 13
Case "E"
b = 14
Case "F"
b = 15
End Select
c = c + b * 16 ^ (l - 1)
l = l - 1
Next
C16To10 = c
Debug.Print C16To10
End Function[/td][/tr][/table]
编写了一个扩展函数,可以扩展到整个字符集
[table=98%][tr][td]Function test()
Debug.Print N10toC62(576, 35)
Debug.Print C62ToN10("gg", 35)
End Function Function C62ToN10(ByVal strA As String, Optional ByVal bt As Byte) As Double
[color=#008000]'本函数用于将 2 8 16 36 62 进制字符串转换为 10 进制数值
'请注意,本函数的输入参数是区分大小写的,36进制以及以下,应该全部转换为大写
'下列进制,如果有必要,可以扩展到整个字符集,
'也就是你只要输入一个字符,就可以代表上万位[/color]
If bt < 2 Or bt > 62 Then
bt = 16
[color=#008000]'默认为 16 进制[/color]
End If
[color=#008000]'2进制 0-1
'8进制 0-7 可以用 clng("&O71") 代替
'16进制 0-9 A-F 可以用 clng("&Hf1") 代替
'36进制 0-9 A-Z
'62进制 0-9 A-Z a-z
'都不对,就用16进制,如果输入数据不符合要求,则出错[/color]
If bt <= 36 Then
strA = UCase(strA)
[color=#008000]'小于等于 36 进值时应该全部转换为大写[/color]
End If
Dim b As Long
Dim b1 As String
Dim c As Double
Dim l As Integer
Dim i As Integer
l = Len(strA)
For i = 1 To l
b1 = Mid(strA, i, 1)
Select Case Asc(b1)
Case 48 To 57
b = CLng(b1)
Case 65 To 90
b = Asc(b1) - 55
Case 97 To 122
b = Asc(b1) - 61
End Select
c = c + b * bt ^ (l - 1)
l = l - 1
Next
C62ToN10 = c
End Function
Function N10toC62(ByVal b As Long, Optional ByVal bt As Byte) As String
[color=#008000]'以下函数将10进制数值根据要求转换为
'2 8 16 36 62 进制字符串
'请注意,本函数的输出结果是区分大小写的[/color]
If bt < 2 Or bt > 62 Then
bt = 16
[color=#008000]'默认为 16 进制[/color]
End If
[color=#008000]'2进制 0-1
'8进制 0-7 可以用 OCT 函数代替
'16进制 0-9 A-F 可以用 HEX 函数代替
'36进制 0-9 A-Z
'62进制 0-9 A-Z a-z
'都不对,就用16进制,如果输入数据不符合要求,则出错[/color]
Dim a As Long
Dim a1 As String
Dim s As String
Do Until b = 0
a = b Mod bt
Select Case a
Case 0 To 9
a1 = CStr(a)
Case 10 To 35
a1 = Chr(a + 55)
Case 36 To 61
a1 = Chr(a + 61)
End Select
s = a1 & s
b = b \ bt
Loop
N10toC62 = s
End Function
[/td][/tr][/table]