VB 中没有无符号整数,所以 &H9E3779B9 是负数。 你可以声明为 Currency 类型,将无符号的 0x9E3779B9 转换成对应的正数 Dim a As Currency a = 2147483648@ + &H1E3779B9 a = a + _ sUrl(k + 0) + _ (sUrl(k + 1) * (2 ^ 8)) + _ (sUrl(k + 2) * (2 ^ 16)) + _ (sUrl(k + 3) * (2 ^ 24)) Debug.Print a
稍改一下 Dim a As Currency a = CCur(&H2E3779B9) + &H70000000 '0x9E3779B9=0x2E3779B9+ 0x70000000 '此处因为做了^运算,相应的数据类型自动转化为Double型了,否则还需要考虑数据溢出的问题 a = a + _ sUrl(k + 0) + _ (sUrl(k + 1) * (2 ^ 8)) + _ (sUrl(k + 2) * (2 ^ 16)) + _ (sUrl(k + 3) * (2 ^ 24)) Debug.Print a
谢谢楼上2位的热心回复。 但我还有一点不明白,就是那2个公式是怎么得出来的。 a = 2147483648@ + &H1E3779B9 a = CCur(&H2E3779B9) + &H70000000这个a的值可能要经常变动。在c#里有uint类型,所以直接用a的值也没负数。。
&H9E3779B9 由于最高位 &H80000000 的存在才成了负数,所以去掉最高位得 &H1E3779B9,再加上无符号数 0x80000000 对应的正数 2147483648。 可以用下面的函数进行转换 Function UInt32(byval l as long) as currency if (l and &H80000000) <> 0 Then UInt32 = 2147483648@ + (l and &H7FFFFFFF) else UInt32 = l end if end functiona = UInt32(&H9E3779B9)
你可以声明为 Currency 类型,将无符号的 0x9E3779B9 转换成对应的正数
Dim a As Currency
a = 2147483648@ + &H1E3779B9
a = a + _
sUrl(k + 0) + _
(sUrl(k + 1) * (2 ^ 8)) + _
(sUrl(k + 2) * (2 ^ 16)) + _
(sUrl(k + 3) * (2 ^ 24))
Debug.Print a
Dim a As Currency
a = CCur(&H2E3779B9) + &H70000000 '0x9E3779B9=0x2E3779B9+ 0x70000000
'此处因为做了^运算,相应的数据类型自动转化为Double型了,否则还需要考虑数据溢出的问题
a = a + _
sUrl(k + 0) + _
(sUrl(k + 1) * (2 ^ 8)) + _
(sUrl(k + 2) * (2 ^ 16)) + _
(sUrl(k + 3) * (2 ^ 24))
Debug.Print a
但我还有一点不明白,就是那2个公式是怎么得出来的。
a = 2147483648@ + &H1E3779B9
a = CCur(&H2E3779B9) + &H70000000这个a的值可能要经常变动。在c#里有uint类型,所以直接用a的值也没负数。。
可以用下面的函数进行转换
Function UInt32(byval l as long) as currency
if (l and &H80000000) <> 0 Then
UInt32 = 2147483648@ + (l and &H7FFFFFFF)
else
UInt32 = l
end if
end functiona = UInt32(&H9E3779B9)