&H82C0C561转换成正数2193671521,急,急,急。。。。。。。

ZHYPDW 2003-08-11 04:43:55
如题,在VB中怎样可以做到,用clng("&H82C0C561"),cdbl("&H82C0C561")都不行,
只能得到-2101295775 ,但我想得到2193671521,该如何做,谢谢!
...全文
71 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl910 2003-08-11
  • 打赏
  • 举报
回复
dim a as long
dim b as double
a=&H82C0C561"
b=a and &H7FFFFFFF
if a and &H80000000 then b=b+2^31
IMHELLFIRE 2003-08-11
  • 打赏
  • 举报
回复
学习...
无意1975 2003-08-11
  • 打赏
  • 举报
回复
呵呵,刚才正在尝试,没看到已经解决。:)
无意1975 2003-08-11
  • 打赏
  • 举报
回复
正如csdngoodnight(居然比我还快,你真行!) 所说已经超过long的类型范围。
所以可以考虑把它分段处理再加起来。

Dim bb As String
Dim aa As Double

bb = "&H82C0C561"

aa = (Val("&H" & Mid(bb, 3, 3)) * Val("&H1000") + Val("&H" & Mid(bb, 6, 3))) * Val("&H100") + Val("&H" & Mid(bb, 9, 2))

测试过了,
则aa = 2193671521
pigpag 2003-08-11
  • 打赏
  • 举报
回复
楼上的可以。
不过最好判断一下strHex是否以&H开头
ZHYPDW 2003-08-11
  • 打赏
  • 举报
回复
问题已解决,2193671521已超出long类型范围(2147483648),但没超出Double类型的范围。
可以自己写个转换函数:
Private Function fHexDbl(ByVal strHex As String) As Double
Dim dblRet As Double
dblRet = 0
Dim iNum As Integer, iloop As Integer
iNum = Len(strHex)
For iloop = 1 To iNum
dblRet = dblRet + Val("&H" + Mid(strHex, iloop, 1)) * (16 ^ (iNum - iloop))
Next
fHexDbl = dblRet
End Function

csdngoodnight 2003-08-11
  • 打赏
  • 举报
回复
2193671521已超出long类型范围(2147483648)

7,789

社区成员

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

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