【问题标题】:Converting a javascript method's functionality to C#将 javascript 方法的功能转换为 C#
【发布时间】:2011-07-06 23:16:02
【问题描述】:

我有一个 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;
   }

【问题讨论】:

  • 你不知道 C# 语法或这些十六进制值代表什么?

标签: c# javascript .net checksum


【解决方案1】:

parseFloat 变为 float.ParseseqNumber.toString(16) 变为 string.Format("{0:x}", seqNumber).ToUpper();

并且注意C#中的子字符串参数不是start,end;而是开始,长度。所以要小心。 function 显然变成了bool。我想就是这样。

【讨论】:

  • 你必须在&之前将float转换为int
  • 是的,我的很简单,可能还有其他错误:) 至少这可以给提问者一个想法。
【解决方案2】:

使用的字符串函数也应该使用不变的文化,因为该函数似乎不用于文本显示。下面是函数的转换方式:

 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;
    }

编辑:添加 Unchecked 关键字:可能发生的溢出错误在这里似乎并不重要。

【讨论】:

    【解决方案3】:
    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);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 2017-08-15
      • 2020-09-02
      • 2020-01-08
      • 1970-01-01
      • 2019-03-05
      • 2015-06-14
      • 1970-01-01
      相关资源
      最近更新 更多