| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1083 人关注过本帖
标题:求教如何突破程序中16进制转换限制
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:5 
求教如何突破程序中16进制转换限制
请教,下面这段程序,最大只能将“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



搜索更多相关主题的帖子: Case Long End 进制转 限制 
2023-05-19 05:52
阳光上的桥
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:38
帖 子:129
专家分:772
注 册:2023-1-12
收藏
得分:7 
VB不支持128位的数据类型,最大就是64位的LONG,要支持更大的整数运算可以用字符串来编程实现。
2023-05-19 07:49
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
以下是引用阳光上的桥在2023-5-19 07:49:19的发言:

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

能麻烦版主大大给个例子吗?
2023-05-19 08:33
阳光上的桥
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:38
帖 子:129
专家分:772
注 册:2023-1-12
收藏
得分:0 
本论坛第一页就有一个例子,是VBS写的,很容易修改位VB6语法

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

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

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

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

2023-05-19 09:16
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:7 
图片附件: 游客没有浏览图片的权限,请 登录注册

    Print "0x80000000 有符号 "; &H80000000
    Print "0xFFFFFFFF 有符号 "; &HFFFFFFFF
    Print "0x80000000 无符号 "; &H80000000 + 2 ^ 32
    Print "0xFFFFFFFF 无符号 "; &HFFFFFFFF + 2 ^ 32
2023-05-19 15:16
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1933
专家分:3012
注 册:2009-12-22
收藏
得分:7 
十六进制转十进制怎么搞那么麻烦,这样不是就可以了?

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编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2023-05-20 18:09
快速回复:求教如何突破程序中16进制转换限制
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020758 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved