注册 登录
编程论坛 VB6论坛

求教如何突破程序中16进制转换限制

ictest 发布于 2023-05-19 05:52, 1196 次点击
请教,下面这段程序,最大只能将“7FFFFFFF”转换成十进制,再大就报溢出错误了,我猜想,这是Long的限制,因为Long最大也就是到“7FFFFFFF”,但计算机自带的计算器则并没有这个现象,可达到“7FFFFFFFFFFFFFFF”,它是怎样计算的呢?求能突破“7FFFFFFF”限制的方法,谢谢!

程序代码:
Private Sub Command1_Click()
    Print HEX_to_DEC("80000000")
End Sub

Public Function HEX_to_DEC(ByVal Hex As String) As Long
    Dim i As Long
    Dim b As Long
   
    Hex = UCase(Hex)
    For i = 1 To Len(Hex)
        Select Case Mid(Hex, Len(Hex) - i + 1, 1)
        Case "0": b = b + 16 ^ (i - 1) * 0
        Case "1": b = b + 16 ^ (i - 1) * 1
        Case "2": b = b + 16 ^ (i - 1) * 2
        Case "3": b = b + 16 ^ (i - 1) * 3
        Case "4": b = b + 16 ^ (i - 1) * 4
        Case "5": b = b + 16 ^ (i - 1) * 5
        Case "6": b = b + 16 ^ (i - 1) * 6
        Case "7": b = b + 16 ^ (i - 1) * 7
        Case "8": b = b + 16 ^ (i - 1) * 8
        Case "9": b = b + 16 ^ (i - 1) * 9
        Case "A": b = b + 16 ^ (i - 1) * 10
        Case "B": b = b + 16 ^ (i - 1) * 11
        Case "C": b = b + 16 ^ (i - 1) * 12
        Case "D": b = b + 16 ^ (i - 1) * 13
        Case "E": b = b + 16 ^ (i - 1) * 14
        Case "F": b = b + 16 ^ (i - 1) * 15
        End Select
    Next i
    HEX_to_DEC = b
End Function



5 回复
#2
阳光上的桥2023-05-19 07:49
VB不支持128位的数据类型,最大就是64位的LONG,要支持更大的整数运算可以用字符串来编程实现。
#3
ictest2023-05-19 08:33
以下是引用阳光上的桥在2023-5-19 07:49:19的发言:

VB不支持128位的数据类型,最大就是64位的LONG,要支持更大的整数运算可以用字符串来编程实现。

能麻烦版主大大给个例子吗?
#4
阳光上的桥2023-05-19 09:16
本论坛第一页就有一个例子,是VBS写的,很容易修改位VB6语法

https://bbs.bccn.net/thread-512020-1-1.html

这种字符串的方法,成百上千位的运算都支持。

帖子里面有加减乘除的算法,转换进制的没有,但是你能写出来的。

[此贴子已经被作者于2023-5-19 09:18编辑过]

#5
吹水佬2023-05-19 15:16
只有本站会员才能查看附件,请 登录

    Print "0x80000000 有符号 "; &H80000000
    Print "0xFFFFFFFF 有符号 "; &HFFFFFFFF
    Print "0x80000000 无符号 "; &H80000000 + 2 ^ 32
    Print "0xFFFFFFFF 无符号 "; &HFFFFFFFF + 2 ^ 32
#6
yuma2023-05-20 18:09
十六进制转十进制怎么搞那么麻烦,这样不是就可以了?

Dim a,b
a = "FFFF"
b = CLng("&H" & a)  '&HFFFF
MsgBox b


写成函数也是可以的,像这样:

程序代码:
Function HexToDec(hex)
    ' 将十六进制字符串转换为十进制数字
    Dim dec, i
   
    dec = 0
    For i = Len(hex) To 1 Step -1
        dec = dec + (16 ^ (Len(hex) - i)) * CInt("&H" & Mid(hex, i, 1))
    Next
   
    HexToDec = dec
End Function


'使用示例
MsgBox HexToDec("FF")
MsgBox HexToDec("FFFF")
MsgBox HexToDec("FFFFFFFF")
MsgBox HexToDec("FFFFFFFFFFFFFFFF")


[此贴子已经被作者于2023-5-20 18:18编辑过]

1