c# - 是否有现有文档说明为什么 VBA Val 函数的行为与相同代码的 .Net 实现不同(十六进制转换)?

标签 c# .net vba vb.net ms-access

我正在从 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/

相关文章:

c# - 如何将 F4 键发送到 C# 中的进程?

c# - VS2010 中的 2.0 框架 .net 引用缺少 System.web.extensions 引用 dll?

c# - jQuery Accordion 阻止路由链接在 ListView 中工作

.net - 丢弃任务的异常会发生什么?

.net - 在 C#.NET 中,使用 using 关键字打开连接,我需要关闭并处理连接还是 .NET 为我做这件事?

VBA获取正在运行的进程的程序名称和任务ID

c# - 关于内联aspx标签的问题

.net - Clickonce 部署后,最终用户是否可以更改应用程序的 app.config?

excel - 横向另存为 PDF

excel - 带有循环和联合的 MS VBA