gpt4 book ai didi

vba - VBA 中 Val 函数的签名结果

转载 作者:行者123 更新时间:2023-12-04 14:32:02 26 4
gpt4 key购买 nike

我在ms access中使用vba,发现如果我的参数大于0x8000小于0x10000,结果为负数

例如。 Val("&H8000") = -32768 Val("&HFFFF")= -1

如何获取无符号数?
谢谢!

最佳答案

这里有个问题:

?TypeName(&HFFFF)
Integer

Integer 类型是 16 位的,65,535 溢出了它。这可能有点矫枉过正,但写起来很有趣:

Function ConvertHex(ByVal value As String) As Double

If Left(value, 2) = "&H" Then
value = Right(value, Len(value) - 2)
End If

Dim result As Double

Dim i As Integer, j As Integer
For i = Len(value) To 1 Step -1

Dim digit As String
digit = Mid$(value, i, 1)

result = result + (16 ^ j) * Val("&H" & digit)
j = j + 1

Next

ConvertHex = result

End Function

此函数从右边开始迭代每个数字,计算其值并在它移动到最左边的数字时将其添加到结果中。


?ConvertHex("&H10")
16
?ConvertHex("&HFF")
255
?ConvertHex("&HFFFF")
65535
?ConvertHex("&HFFFFFFFFFFFFF")
281474976710655

更新

正如我所怀疑的,有更好的方法来做到这一点。 Credits to @Jonbot for this one :

Function ConvertHex(ByVal value As String) As Currency
Dim result As Currency
result = CCur(value)

If result < 0 Then
'Add two times Int32.MaxValue and another 2 for the overflow
'Because the hex value is apparently parsed as a signed Int64/Int32
result = result + &H7FFFFFFF + &H7FFFFFFF + 2
End If

ConvertHex = result
End Function

关于vba - VBA 中 Val 函数的签名结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32814640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com