要求在10进制数0到18446744073709551615之间任取一个数都能转换成一个16进制数,请给出vb代码。

解决方案 »

  1.   

    注明,偷来的code
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Function DoubleToHEX(dnumber As Double) As String
        Dim HexBytes(0 To 7) As Byte
        Dim i As Integer
        Dim x As String
        CopyMemory HexBytes(0), dnumber, 8
        
        x = ""
        
        For i = 0 To 7
            x = HEX00(HexBytes(i)) & x
        Next i
        
        DoubleToHEX = x
    End FunctionPrivate Function HEX00(bNumber As Byte) As String
        Dim x As String
        x = "0" & Hex(bNumber)
        HEX00 = Right(x, 2)
    End Function
      

  2.   

    数据超大Private Sub Command1_Click()
    '    Text3 = Hex(Text1)
        Text2 = fun_GetHex(Text1)
        
    End Sub
    Private Function fun_GetHex(ByVal strSource As String) As String
        Dim i As Integer
        Dim strD As String
        Dim strT As String
        
        For i = 0 To (Len(strSource) - 1) \ 5
            strD = strD & (strT & Mid(strSource, i * 5 + 1, 5)) \ 16
            strT = (strT & Mid(strSource, i * 5 + 1, 5)) Mod 16
        Next i
        
        If strD >= 16 Then
            fun_GetHex = fun_GetHex(strD) & Hex(strT)
        Else
           fun_GetHex = Hex(strD) & Hex(strT)
        End If
        
    End Function
      

  3.   

    怎么个不对法?我测试没有问题,小数时text2中和text3中一致
      

  4.   

    比如:18446744073709551615转为16进制数应是:FFFFFFFFFFFFFFFF,而用7楼的代码得出的确是:28F5C293955FFFF
      

  5.   

    50分归我了,呵呵~~~~~:)看看24个F不出的程序Private Sub Form_Load()
        Dim a As String, b As String
        
        a = "79228162514264337593543950335" '这是VB能处理的最大整数Decimal类型24个F,
                                            '计算器转换此数到16进制时已经溢出得16个F
        b = DecToHex(a)
        Debug.Print b
      
        a = "18446744073709551615" '这个数属Decimal类型转换后16个F
        b = DecToHex(a)
        Debug.Print b
      
        a = "4294967295" '这是C语言无符号长整的最大数8个F
        b = DecToHex(a)
        Debug.Print b
        
        a = "65535" '这是C语言无符号整形最大数4个F
        b = DecToHex(a)
        Debug.Print b
        
        a = "1234567890" '随便给个不出错的数,可以对照计算机器的值
        b = DecToHex(a)
        Debug.Print b
        
        a = "1111111111a1111111111"   '这是一个出错的例子
        b = DecToHex(a)
        Debug.Print bEnd SubPrivate Function DecToHex(ByVal c As String) As String
    '10进制转16进制函数
    '24个F以下(含24个F)的数不会出错
      On Error GoTo imsg
      Dim a, b, i As Integer, m As Integer
      Dim iH() As String, iHex As String
        If c = "0" Then
           DecToHex = 0
           Exit Function
        End If
        
        a = CDec(c)
        b = CDec(b)
        
        While a > 0
            ReDim Preserve iH(i)
            b = Int(a / 16)
            iH(i) = a - b * 16
            a = b
            i = i + 1
        Wend
        For m = i - 1 To 0 Step -1
            iHex = iHex & Hex(iH(m))
        Next
        DecToHex = iHex
        Exit Function
    imsg:
        Debug.Print "原数据错误!";
        DecToHex = ""
    End Function
      

  6.   

    50分归我了,呵呵~~~~~:) 看看24个F以内不会出错的程序 
    Private Sub Form_Load()
        Dim a As String, b As String
        
        a = "79228162514264337593543950335" '这是VB能处理的最大整数Decimal类型24个F,
                                            '计算器转换此数到16进制时已经溢出得16个F
        b = DecToHex(a)
        Debug.Print b
      
        a = "18446744073709551615" '这个数属Decimal类型转换后16个F
        b = DecToHex(a)
        Debug.Print b
      
        a = "4294967295" '这是C语言无符号长整的最大数8个F
        b = DecToHex(a)
        Debug.Print b
        
        a = "65535" '这是C语言无符号整形最大数4个F
        b = DecToHex(a)
        Debug.Print b
        
        a = "1234567890" '随便给个不出错的数,可以对照计算机器的值
        b = DecToHex(a)
        Debug.Print b
        
        a = "1111111111a1111111111"   '这是一个出错的例子
        b = DecToHex(a)
        Debug.Print bEnd SubPrivate Function DecToHex(ByVal c As String) As String
    '10进制转16进制函数
    '24个F以下(含24个F)的数不会出错
      On Error GoTo imsg
      Dim a, b, i As Integer, m As Integer
      Dim iH() As String, iHex As String
        If c = "0" Then
           DecToHex = 0
           Exit Function
        End If
        
        a = CDec(c)
        b = CDec(b)
        
        While a > 0
            ReDim Preserve iH(i)
            b = Int(a / 16)
            iH(i) = a - b * 16
            a = b
            i = i + 1
        Wend
        For m = i - 1 To 0 Step -1
            iHex = iHex & Hex(iH(m))
        Next
        DecToHex = iHex
        Exit Function
    imsg:
        Debug.Print "原数据错误!";
        DecToHex = ""
    End Function