2011-07-06 43 views
0

我有一個JavaScript函數,它具有我想要轉換爲C#的功能。我不知道如何正確翻譯這個。將javascript方法的功能轉換爲C#

任何人都可以幫忙嗎?

function validateSequenceNumber(val, num) { 

    var seqNumber = ((parseFloat(num) + 0xCED9) * 0x8088405) & 0xFFFF 
    var checksum = seqNumber.toString(16).toUpperCase() 

    if (checksum != val.substring(11, 15)) { 
    return false; 
    } 
    return true; 
    } 
+0

你不知道這個或這些十六進制值代表什麼C#語法? – Illuminati

回答

3

parseFloat變得float.ParseseqNumber.toString(16)成爲string.Format("{0:x}", seqNumber).ToUpper();

並注意子參數在C#中沒有起點,終點;而是開始,長度。所以要小心。顯然,function變成bool。我認爲就是這樣。

+1

你必須在'&'之前將'float'強制轉換爲'int'。 –

+0

是的,我的確很簡單,也可能有其他錯誤:)至少這可能會給提問者一個想法。 –

1

所使用的字符串函數也應該使用不變的文化,因爲該函數似乎不用於文本顯示。下面是如何的功能可能被轉換:

private static bool ValidateSequenceNumber(string val, string num) { 
    System.Globalization.CultureInfo inv=System.Globalization.CultureInfo.InvariantCulture; 
     int seqNumber = unchecked((((int)Double.Parse(num,System.Globalization.NumberStyles.Any,inv) + 0xCED9) * 0x8088405) & 0xFFFF); 
     string checksum = seqNumber.ToString("X",inv).ToUpperInvariant(); 
     if (checksum != val.Substring(11, 4)) { 
      return false; 
     } 
     return true; 
    } 

編輯:添加未選中關鍵字:會發生的溢出錯誤似乎是不重要的位置。

0
public bool validateSequenceNumber(string val, int num) 
{ 
    float seqNumber = (Int32)((Single.Parse(num) + 0xCED9) * 0x8088405) & 0xFFFF; 
    string checksum = seqNumber.ToString("X").ToUpper(); 
    return (checksum != val.Substring(11, 4) ? false : true); 
}