我正在从 VBA 转换代码,我需要确认有关 Val 函数行为的证据,以便在 .Net 中忠实地重现它。
问题出在这行VBA代码
lHexNum = Val("&h" & HexNum) ' HexNum = 3B05000004F137
正在产生此输出
323895
应该是这个,
16612521184391480
但我不知道为什么不是。
我在.Net中使用了两种方法,它们都确认了16612521184391480的预期输出(以及使用简单的十六进制计算器)。
Convert.ToInt64(HexNum, 16);
和
Microsoft.VisualBasic.Conversion.Val("&h" + HexNum);
但是,我仍然需要完美地复制 VBA 程序的实际输出,该程序现在提供 323895 输出。
我能找到的唯一推理是,如果我从 HexNum 中删除 3B05,我就会得到匹配的输出。由于我无法针对足够的实时数据进行测试,以 100% 确定这在所有情况下都有效,因此我无法使用此 hack。
是否有人有关于 Access 2003 应用程序如何以及为何从 Val 函数获取 323895 输出以及为什么匹配的 Microsoft.VisualBasic.Conversion.Val 方法无法获取相同输出的引用或更多信息?
最佳答案
嗯,323895
是(十六进制)0004F137
,所以完全猜测这里的问题可能是 Val
您正在使用(或者:您存储值的位置)是 32 位,因此只会为您提供最后 8 个字符(数据的最后 4 个字节)的值
关于c# - 是否有现有文档说明为什么 VBA Val 函数的行为与相同代码的 .Net 实现不同(十六进制转换)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38207174/