gpt4 book ai didi

c# - 如何在 VB.NET 中实现 GetStableHash 方法

转载 作者:行者123 更新时间:2023-11-30 21:08:17 25 4
gpt4 key购买 nike

我已经在几个论坛上问过这个问题,但没有很好地解释为什么上面的代码不能从 C# 转换为 Visual Basic。

代码其实来自这个论坛,用C#写的。 (the source)

static public int GetStableHash(string s)
{
uint hash = 0;
// if you care this can be done much faster with unsafe
// using fixed char* reinterpreted as a byte*
foreach (byte b in System.Text.Encoding.Unicode.GetBytes(s))
{

hash += b;
hash += (hash << 10);
hash ^= (hash >> 6);

}
// final avalanche
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
// helpfully we only want positive integer < MUST_BE_LESS_THAN
// so simple truncate cast is ok if not perfect
return (int)(hash % MUST_BE_LESS_THAN);
}

所以,代码应该类似于 VB.NET 中的代码

    Const MUST_BE_LESS_THAN As Integer = 100000000

Function GetStableHash(ByVal s As String) As Integer


Dim hash As UInteger = 0

For Each b as Byte In System.Text.Encoding.Unicode.GetBytes(s)
hash += b
hash += (hash << 10)
hash = hash Xor (hash >> 6)
Next

hash += (hash << 3)
hash = hash Xor (hash >> 11)
hash += (hash << 15)

Return Int(hash Mod MUST_BE_LESS_THAN)
End Function

好像是对的,但是行不通。在 VB.NET 中,“hash += (hash << 10)”发生溢出

最佳答案

溢出检查在 C# 中默认关闭,但在 VB.NET 中默认打开。项目 + 属性,编译选项卡,向下滚动,高级编译选项并勾选“删除整数溢出检查”选项。

如果这让您感到不舒服,请将代码移至单独的类库项目中,这样设置更改就不会影响您的其余代码。其他项目现在也可以是 C# 项目:)

关于c# - 如何在 VB.NET 中实现 GetStableHash 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751443/

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