【问题标题】:Convert C# function to VB, char value overflow error将C#函数转换为VB,char值溢出错误
【发布时间】:2012-07-18 11:22:44
【问题描述】:

我需要将下面的函数转换为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

我错过了什么?谁能解释一下细节?

【问题讨论】:

  • 哪些输入失败了?你确定你没有传递一个对于 UInt32 来说太大的输入吗?
  • 我认为字符串导致它超出uint 限制

标签: c# vb.net code-conversion


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 应该返回字符代码。这也是 C# 代码所做的,只是隐含的。另一方面,您的代码无法编译。
    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多