Преобразование функциональности метода javascript в C # - PullRequest
0 голосов
/ 07 июля 2011

У меня есть функция 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;
   }

Ответы [ 3 ]

3 голосов
/ 07 июля 2011

parseFloat становится float.Parse, seqNumber.toString(16) становится string.Format("{0:x}", seqNumber).ToUpper();

И обратите внимание на параметры подстроки в C # не начало, конец; скорее начало, длина. Так что будьте осторожны. function становится bool очевидно. И я думаю, что это так.

1 голос
/ 07 июля 2011

Используемые строковые функции должны также использовать инвариантную культуру, поскольку эта функция, похоже, не используется для отображения текста. Ниже показано, как функция может быть преобразована:

 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: возникающие ошибки переполнения здесь не важны.

0 голосов
/ 07 июля 2011
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);
}
...