2012-07-18 88 views
1

我需要轉換到VB.NET下面的函數,但我不知道如何處理的聲明轉換C#功能,VB,char值溢出錯誤

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 

我缺少什麼?有人可以解釋細節嗎?

+0

什麼投入失敗?你確定你沒有通過一個對於UInt32來說太大的輸入嗎? – 2012-07-18 11:28:17

+1

我認爲字符串正在導致它流過'uint'限制 – V4Vendetta 2012-07-18 11:30:41

回答

3

你的代碼是正確的。由於res隨着每次迭代呈指數增長(並且不是導致溢出的字符轉換,而是溢出的無符號整數),因此計算在幾個字符後溢出。

C#默認允許整數操作溢出 - VB不會。不過,您可以禁用VB的項目設置中的溢出檢查。不過,我會盡量不依賴於此。是否有這個特定的C#必須移植的原因?畢竟,您可以毫不費力地混合使用C#和VB庫。

1

這裏是一個有用的在線轉換器:http://www.developerfusion.com/tools/convert/csharp-to-vb/

+0

它*應該*返回字符代碼。這就是C#代碼所做的,只是隱含的。另一方面,你的代碼將不能編譯。 – 2012-07-18 11:35:16

+0

@KonradRudolph ooo ...你是對的。謝謝。 – 2012-07-18 11:39:46