.net - 在 VB.NET 中是否有用于执行不安全算术的实用方法?

标签 .net vb.net hash unsafe

我正在覆盖获取哈希码。有一点

Hash = 1210600964 * 31 + -837896230

这会导致 OverflowException。有没有我可以使用的方法,比如:

Hash = addUnsafe(multiplyUnsafe(1210600964, 31), -837896230)

无需将我的项目链接到另一个程序集?我不想删除溢出检查。 dllimports 正常。

最佳答案

您可以改为使用 64 位数字进行数学计算,然后使用 And 去除多余部分:

Option Infer On
' .....
Shared Function MultiplyWithTruncate(a As Integer, b As Integer) As Integer
    Dim x = CLng(a) * CLng(b)
    Return CInt(x And &HFFFFFFFF)
End Function

尽管您可以在一个解决方案中混合使用 C# 和 VB.NET 项目,但用 C# 编写一个类来执行未经检查的算法可能是最简单的,即使您不热衷于添加对另一个程序集的引用。

用 C# 编写函数甚至可能是个好主意,这样您就可以测试 VB 函数是否返回预期值。这是我检查上面代码所做的。

编辑:Joseph Nields 的评论提示我测试性能,结果使用 CLng 而不是 Convert.ToInt64 并且运行速度更快。

关于.net - 在 VB.NET 中是否有用于执行不安全算术的实用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436730/

相关文章:

c# - 嵌入式 MySQL 服务器 C# 包装器?

c# - 验证策略

excel - VB.NET - 删除 Activecell 的 'Named Range'

c# - 我应该如何在 C# 中散列这些数据?

hash - 在 Snowflake-db 中使用 Sha 与 md5 或 Hash

Ruby Hash.new 与哈希文字

.net - Mono 和 TransactionScope

c# - 响应式(Reactive)扩展 : Creating a pipeline with Rx that works with files

c# - GroupBy 匿名类型不起作用。在 C# 它的工作

.net - 使用 ADO.net(OLEDB) 导入 UTF-8 CSV 文件