用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
changechange的公告
MVP - Microsoft Office Access <br><br> <img src="http://www.microsoft.com/china/community/images/MVP.gif"><br><br> <b><a href="http://access911.net">access</font><font color=blue>911</font><font color=red>.net</font></a></b> 没想到做 BLOGGER 已经 5 年多了
文章分类
存档

原创  ACCESS 如何进行二进制到六十二进制向十进制的转换? 收藏

新手来看:如何进行二进制到六十二进制向十进制的转换?

< language="javascript" type="text/javascript"> function addtitle(){ var straddtitle = "新手来看:如何进行二进制到六十二进制向十进制的转换?"; if (straddtitle.length!==0){ document.title=document.title + "《" + straddtitle + "》;专题号:71FAB61E13DCE8F3"; } }

问题:


新手来看:如何进行二进制到六十二进制向十进制的转换?《函数》
如何进行2进制到62进制的转换?
10进制转16进制用 HEX 函数,那么倒过来哪?
十六进制转十进制用什么函数?

回答:


不需要函数,请参考以下代码:
Dim x As Double
x = "&H" & "a1"
Debug.Print x

可以用以下函数:

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

编写了一个扩展函数,可以扩展到整个字符集

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
'本函数用于将 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 = c
End Function

Function 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 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



发表于 @ 2005年10月08日 00:31:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:access 中如何使本机时间与服务器时间同步? | 新一篇:ACCESS中关于月结存年结存功能的设计原理

  • 发表评论
  • 评论内容:
  •  
Copyright © changechange
Powered by CSDN Blog