happmaoo 发表于 2013-1-19 04:09:33

8,10,16,36,62进制之间的转换for vb/vbscript

下面是VBSCRIPT的写法
Function N10toC62(b, bt)   If bt<2 Or bt>62 Then      bt = 16      '默认为 16 进制    End If    '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进制,如果输入数据不符合要求,则出错      Dim a   Dim a1   Dim s    Do while b<>0a= b mod btif a>=0 and a<=9 then            a1 = CStr(a)end ifif a>=10 and a<=35 then            a1 = Chr(a + 55)end ifif a>=36 and a<=61 then            a1 = Chr(a + 61)end if'      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 = sEnd FunctionFunction C62ToN10(strA , bt)         If bt < 2 Or bt > 62 Then      bt = 16      '默认为 16 进制    End If    '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进制,如果输入数据不符合要求,则出错      If bt <= 36 Then      strA = UCase(strA)      '小于等于36进值时应该全部转换    End If    Dim a    Dim b    Dim b1    Dim c   Dim l    Dim i   l = Len(strA)    For i = 1 To l      b1 = Mid(strA, i, 1)a=Asc(b1)if a>=48 and a<=57 then            b = CLng(b1)end ifif a>=65 and a<=90 then            b = Asc(b1) - 55end ifif a>=97 and a<=122 then            b = Asc(b1) - 61end if'      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 = cEnd Function
下面是原文VB 的代码
Function test()    Debug.Print N10toC62(576, 35)    Debug.Print C62ToN10("gg", 35)End FunctionFunction C62ToN10(ByVal strA As String, Optional ByVal bt As Byte) As Double'本函数用于将 2 8 16 36 62 进制字符串转换为 10 进制数值'请注意,本函数的输入参数是区分大小写的,36进制以及以下,应该全部转换为大写      '下列进制,如果有必要,可以扩展到整个字符集,    '也就是你只要输入一个字符,就可以代表上万位      If bt < 2 Or bt > 62 Then      bt = 16      '默认为 16 进制    End If    '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进制,如果输入数据不符合要求,则出错      If bt <= 36 Then      strA = UCase(strA)      '小于等于 36 进值时应该全部转换为大写    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 = cEnd FunctionFunction N10toC62(ByVal b As Long, Optional ByVal bt As Byte) As String'以下函数将10进制数值根据要求转换为'2 8 16 36 62 进制字符串'请注意,本函数的输出结果是区分大小写的    If bt < 2 Or bt > 62 Then      bt = 16      '默认为 16 进制    End If    '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进制,如果输入数据不符合要求,则出错      Dim a As Long    Dim a1 As String    Dim s As String    Do      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 Until b = 0    N10toC62 = sEnd Function
源代码转自:http://access911.net/fixhtm/71FAB61E13DCE8F3.htm
页: [1]
查看完整版本: 8,10,16,36,62进制之间的转换for vb/vbscript