没分了,这几天提的问题把分都给了。。现在募捐中。。所以抠门,必须的,呵呵。就给10分原贴地址:
http://community.csdn.net/Expert/topic/4825/4825682.xml?temp=.4218408我提供的函数有问题(不是说不能取得正确结果)其实HEX2DEC并没有我提供的代码那么麻烦,可能对一些初学者造成了误导,在此道歉。
更正该函数如下:Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End Function测试时请使用如下代码:Public Function Hex2Dec(InputData As String) As Double
Hex2Dec = "&H" & InputData
End FunctionPrivate Sub Form_Paint()
Me.AutoRedraw = True
Me.Height = 6180
Me.Width = 9990
Dim i As Long
For i = 0 To 31
    Print i; Hex(i); Hex2Dec(CStr(Hex(i))), _
          i + 32; Hex(i + 32); Hex2Dec(CStr(Hex(i + 32))), _
          i + 64; Hex(i + 64); Hex2Dec(CStr(Hex(i + 64))), _
          i + 96; Hex(i + 96); Hex2Dec(CStr(Hex(i + 96))), _
          i + 128; Hex(i + 128); Hex2Dec(CStr(Hex(i + 128))), _
          i + 160; Hex(i + 160); Hex2Dec(CStr(Hex(i + 160))), _
          i + 192; Hex(i + 192); Hex2Dec(CStr(Hex(i + 192))), _
          i + 224; Hex(i + 224); Hex2Dec(CStr(Hex(i + 224)))
Next
End Sub
虽然分少点,,我想2004chenlong还是不会介意的吧:)回一下拿分

解决方案 »

  1.   

    还是有问题呢郁闷啊,把函数返回值声明为LONG比较好。哎。。老伤心了
      

  2.   


    Private Sub C1_Click()
    Dim n As Integer, a As Double
    n = Len(Text1.Text)
    If O1(2).Value = True Then
          For i = 0 To n - 1
             a = a + Val(Mid(Text1.Text, i + 1, 1)) * (2 ^ (n - i - 1))     Next i
         Text1.Text = a
    ElseIf O1(8).Value = True Then
        For i = 0 To n - 1
             a = a + Val(Mid(Text1.Text, i + 1, 1)) * (8 ^ (n - i - 1))
         Next i
        Text1.Text = a
    ElseIf O1(16).Value = True Then
       
         For i = 0 To n - 1
             b = Mid(Text1.Text, i + 1, 1)
      
             a = a + Val(BToH(b)) * (16 ^ (n - i - 1))
         Next i
        Text1.Text = a
    End If
    End Sub
    Public Function BToH(ByVal b As String) As String
    Select Case b
    Case "1": H = 1
    Case "2": H = 2
    Case "3": H = 3
    Case "4": H = 4
    Case "5": H = 5
    Case "6": H = 6
    Case "7": H = 7
    Case "8": H = 8
    Case "9": H = 9
    Case "A": H = 10
    Case "B": H = 11
    Case "C": H = 12
    Case "D": H = 13
    Case "E": H = 14
    Case "F": H = 15
    Case "0": H = 0
    End SelectBToH = H
    End Functio
    这是我刚写出来的 能用不过就是多了点~~ 2进制 8进制都有
      

  3.   

    如何将一串16进制的还原成10进制比如把FFFF还原成65535Private Sub Command1_Click()
    Debug.Print Hex2Dec("FFFF")
    End Sub
    Public Function Hex2Dec(InputData As String) As Double
    Dim tmp As Double
    inlen = Len(InputData)
    If inlen Mod 2 = 1 Then InputData = "0" & InputData: inlen = inlen + 1
    t = 1
    For i = inlen \ 2 To 1 Step -1
    tmp = tmp + t * CInt("&H" & Mid(InputData, i * 2 - 1, 2))
    t = t * 256
    Next
    Hex2Dec = tmp
    End Function
      

  4.   

    TO:二位楼上:
        我不是问问题,只是对以前的回答道歉,这些进制转换函数我都有现成的代码,写也不麻烦,多是根据数制的原有换算方式转换的,但是16进制到10进制可以由VB来完成,看看我给的代码就知道了,一行就可以把16进制转为10进制
    boiciy(喜欢去哪去哪) 你写的代码是不是有问题啊,你用我给的函数试试,
    Public Function Hex2Dec(InputData As String) As Double
    Hex2Dec = "&H" & InputData
    End FunctionPrivate Sub Form_Paint()
    print Hex2Dec("FFFF")
    End Sub看看返回结果是什么?65535,一点都不差。虽然我在演示代码里面只用了0-255,但是实际上,VB在数据不溢出的情况下可以直接把任意一个16进制转换为10进制,实现方法就是在16进制字符串前加&H,然后将这个字符赋值给一个数值变量,一般来说长整就够了,但是也有更长的,那就可以用双精度或变体等类型。我只所以用0-255进行演示而没有提上面这个问题,主要是因为原贴是将2位的16进制还原。。
    看来我发这个帖子还真是有必要,呵呵,虽然原贴作者还没来,但可能已经让2位楼上有所感悟了