如何将一个长度超过8的16进制数转化成10进制?

bywind1980 2004-04-16 05:34:27
如题。谢谢了各位。
...全文
212 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
superxiumu 2004-09-13
  • 打赏
  • 举报
回复
mark
northwolves 2004-04-17
  • 打赏
  • 举报
回复
完整的代码(包括逆转换):

Dim largehex As String, largedec As String, start As Long
Function sums(ByVal x As String, ByVal y As String) As String
Dim max As Long, temp As Long, i As Long, result As Variant
max = IIf(Len(x) >= Len(y), Len(x), Len(y))
x = Right(String(max, "0") & x, max)
y = Right(String(max, "0") & y, max)
ReDim result(0 To max)
For i = max To 1 Step -1
result(i) = Val(Mid(x, i, 1)) + Val(Mid(y, i, 1))
Next
For i = max To 1 Step -1
temp = result(i) \ 10
result(i) = result(i) Mod 10
result(i - 1) = result(i - 1) + temp
Next
If result(0) = 0 Then result(0) = ""
sums = Join(result, "")
Erase result

End Function

Function multi(ByVal x As String, ByVal y As String) As String
Dim result As Variant
Dim xl As Long, yl As Long, temp As Long, i As Long
xl = Len(Trim(x))
yl = Len(Trim(y))

ReDim result(1 To xl + yl)
For i = 1 To xl
For temp = 1 To yl
result(i + temp) = result(i + temp) + Val(Mid(x, i, 1)) * Val(Mid(y, temp, 1))
Next
Next

For i = xl + yl To 2 Step -1
temp = result(i) \ 10
result(i) = result(i) Mod 10
result(i - 1) = result(i - 1) + temp
Next

If result(1) = "0" Then result(1) = ""
multi = Join(result, "")
Erase result

End Function
Function POWER(ByVal x As Integer) As String
POWER = 1
Dim i As Integer
For i = 1 To x
POWER = multi(POWER, CLng(&H1000000))
Next
End Function
Function HEXTODEC(ByVal x As String) As String
Dim A() As String, i As Long, UNIT As Integer
For i = 1 To Len(x)
If Not IsNumeric("&h" & Mid(x, i, 1)) Then MsgBox "NOT A HEX FORMAT!", 64, "INFO": Exit Function
Next
x = String((6 - Len(x) Mod 6) Mod 6, "0") & x

UNIT = Len(x) \ 6 - 1
ReDim A(UNIT)
For i = 0 To UNIT
A(i) = CLng("&h" & Mid(x, i * 6 + 1, 6))
Next
For i = 0 To UNIT
A(i) = multi(A(i), POWER(UNIT - i))
HEXTODEC = sums(HEXTODEC, A(i))
Next
End Function
'hextodec
Private Sub Command1_Click()
largehex = "123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE"
start = Timer
largedec = HEXTODEC(largehex)
MsgBox "hex:" & largehex & vbCrLf & vbCrLf & "dec:" & largedec, 64, "it take me about " & Format((Timer - start), "0.0000") & " seconds to trans the hugehex to dec"
End Sub


'dectohex
Private Sub Command2_Click()
largedec = "717291632801918922030423142962255869416485831946154509020082328913819935586969956003869272100276828703758765759577310"
start = Timer
largehex = dectohex(largedec)
MsgBox "dec:" & largedec & vbCrLf & vbCrLf & "hex:" & largehex, 64, "it take me about " & Format((Timer - start), "0.0000") & " seconds to trans the hugenum to hex"

End Sub

Function half(ByVal x As String) As String 'get half of x
x = 0 & x
Dim i As Long
ReDim result(2 To Len(x)) As String
For i = 2 To Len(x)
result(i) = CStr(Val(Mid(x, i, 1)) \ 2 + IIf(Val(Mid(x, i - 1, 1)) Mod 2 = 1, 5, 0))
Next
half = Join(result, "")
If Left(half, 1) = "0" Then half = Right(half, Len(half) - 1) ' no zero ahead
End Function
Function dectohex(ByVal hugenum As String) As String ' trans hugenum to hex
Do While Len(hugenum) > 2
dectohex = Hex(Val(Right(hugenum, 4)) Mod 16) & dectohex
For i = 1 To 4 'devide hugenum by 16
hugenum = half(hugenum)
Next
Loop
dectohex = Hex(Val(hugenum)) & dectohex
End Function
northwolves 2004-04-17
  • 打赏
  • 举报
回复
呵呵,以前写的,不考虑负数情况:

Function sums(ByVal X As String, ByVal y As String) As String
Dim max As Long, temp As Long, I As Long, result As Variant
max = IIf(Len(X) >= Len(y), Len(X), Len(y))
X = Right(String(max, "0") & X, max)
y = Right(String(max, "0") & y, max)
ReDim result(0 To max)
For I = max To 1 Step -1
result(I) = Val(Mid(X, I, 1)) + Val(Mid(y, I, 1))
Next
For I = max To 1 Step -1
temp = result(I) \ 10
result(I) = result(I) Mod 10
result(I - 1) = result(I - 1) + temp
Next
If result(0) = 0 Then result(0) = ""
sums = Join(result, "")
Erase result

End Function

Function multi(ByVal X As String, ByVal y As String) As String
Dim result As Variant
Dim xl As Long, yl As Long, temp As Long, I As Long
xl = Len(Trim(X))
yl = Len(Trim(y))

ReDim result(1 To xl + yl)
For I = 1 To xl
For temp = 1 To yl
result(I + temp) = result(I + temp) + Val(Mid(X, I, 1)) * Val(Mid(y, temp, 1))
Next
Next

For I = xl + yl To 2 Step -1
temp = result(I) \ 10
result(I) = result(I) Mod 10
result(I - 1) = result(I - 1) + temp
Next

If result(1) = "0" Then result(1) = ""
multi = Join(result, "")
Erase result

End Function
Function POWER(ByVal X As Integer) As String
POWER = 1
Dim I As Integer
For I = 1 To X
POWER = multi(POWER, CLng(&H1000000))
Next
End Function
Function HEXTODEC(ByVal X As String) As String
Dim A() As String, I As Long, UNIT As Integer
For I = 1 To Len(X)
If Not IsNumeric("&h" & Mid(X, I, 1)) Then MsgBox "NOT A HEX FORMAT!", 64, "INFO": Exit Function
Next
X = String((6 - Len(X) Mod 6) Mod 6, "0") & X

UNIT = Len(X) \ 6 - 1
ReDim A(UNIT)
For I = 0 To UNIT
A(I) = CLng("&h" & Mid(X, I * 6 + 1, 6))
Next
For I = 0 To UNIT
A(I) = multi(A(I), POWER(UNIT - I))
HEXTODEC = sums(HEXTODEC, A(I))
Next
End Function

Private Sub Command1_Click()
MsgBox HEXTODEC("123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE123456789ABCDE")
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧