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 に答える