1

我需要将以下函数转换为 VB.NET,但我不确定如何处理该语句

res = (uint)((h * 0x21) + c);

功能齐全:

private static uint convert(string input)
{
    uint res = 0;
    foreach (int c in input)
        res = (uint)((res * 0x21) + c);
    return res;
}

我创建了以下内容,但出现溢出错误:

Private Shared Function convert(ByVal input As String) As UInteger

    Dim res As UInteger = 0
    For Each c In input
        res = CUInt((res * &H21) + Asc(c)) ' also tried AscW 
    Next
    Return res

End Function

我错过了什么?有人可以解释一下细节吗?

4

2 回答 2

3

你的代码是正确的。计算在几个字符后溢出,因为res每次迭代都会以指数方式增加(导致溢出的不是字符的转换,而是溢出的无符号整数)。

C# 默认允许整数运算溢出——VB 不允许。不过,您可以在 VB 的项目设置中禁用溢出检查。但是我会尽量不依赖这个。是否有理由必须移植这个特定的 C#?毕竟,您可以毫不费力地混合使用 C# 和 VB 库。

于 2012-07-18T11:36:37.617 回答
1

这是一个有用的在线转换器:http: //www.developerfusion.com/tools/convert/csharp-to-vb/

于 2012-07-18T11:31:13.653 回答