注明,偷来的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
数据超大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
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
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
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
' 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
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
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