2011-07-06 19 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); 
}