Преобразование JavaScript в C # - PullRequest
       11

Преобразование JavaScript в C #

0 голосов
/ 26 ноября 2010

Я немного сбит с толку, когда дело доходит до конвертации этого JavaScript в C # ...

Любая помощь будет оценена!

Вот код JavaScript:

function d(strInput) {
    strInput = decoder(strInput);
    var strOutput = "";
    var intOffset = (key + 112) / 12;
    for (i = 4; i < strInput.length; i++) {
        thisCharCode = strInput.charCodeAt(i);
        newCharCode = thisCharCode - intOffset;
        strOutput += String.fromCharCode(newCharCode)
    }
    document.write(strOutput)
}

И это моя попытка конвертировать его в C #. Иногда он работает, но большую часть времени для отрицательных чисел в качестве ключа ...

public string decode(int key, string data)
{
    int i;
    string strInput = base64Decode(data);
    StringBuilder strOutput = new StringBuilder("");

    int intOffset = (key + 112) / 12;
    for (i = 4; i < strInput.Length; i++)
    {

        int thisCharCode = strInput[i];
        char newCharCode = (char)(thisCharCode - intOffset);
        strOutput.Append(newCharCode);
    }
    return strOutput.ToString();
}

В настоящее время выводит следующее:

(int key = 212, string data = "U0lra36DfImFkImOkImCW4OKj4h8hIdJfoqI")
Output = {c¬a¬¬¬¬¬¬¬¬@¬¬¬¬a¬¬.c¬¬}


(int key = -88, string data = "T1RXYmV0cHFkZ3R1MzQ1Ng==")
Output = {crnobers1234}

1 Ответ

2 голосов
/ 26 ноября 2010

Этот код дает те же результаты, что и ваш пример, для двух примеров ввода:

    public string decoder(string data)
    {
        string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        char o1, o2, o3;
        int h1, h2, h3, h4, bits, i = 0;
        string enc = "";
        do
        {
            h1 = b64.IndexOf(data.Substring(i++, 1));
            h2 = b64.IndexOf(data.Substring(i++, 1));
            h3 = b64.IndexOf(data.Substring(i++, 1));
            h4 = b64.IndexOf(data.Substring(i++, 1));
            bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
            o1 = (char)(bits >> 16 & 0xff);
            o2 = (char)(bits >> 8 & 0xff);
            o3 = (char)(bits & 0xff);
            if (h3 == 64) enc += new string(new char[] { o1 });
            else if (h4 == 64) enc += new string(new char[] { o1, o2 });
            else enc += new string(new char[] { o1, o2, o3 });
        } while (i < data.Length);
        return enc;
    }

    public string d(int key, string data)
    {
        int i;
        string strInput = decoder(data);
        StringBuilder strOutput = new StringBuilder("");

        int intOffset = (key + 112) / 12;
        for (i = 4; i < strInput.Length; i++)
        {

            int thisCharCode = strInput[i];
            char newCharCode = (char)(thisCharCode - intOffset);
            strOutput.Append(newCharCode);
        }
        return strOutput.ToString();
    }

Я уверен, что это может быть сделано с некоторой очисткой!Это просто дословный перевод вашей функции Javascript decoder (), которая сделала это.

...