无法将C ++方法转换为C#

时间:2017-04-04 18:45:52

标签: c# c++

我正在尝试翻译使用自行开发加密形式的C ++方法。但我不明白Buffer[x]Input[x]正在做什么?作为一个C#开发人员(初学者),它看起来应该是数组,但它们不是这样声明的。有人可以解释一下吗?

输入字符串“{x;ƒ~sq{j | tLtuq”转换为“MY SOFTWARE INC”

AnsiString __fastcall TMyMain::Decode(AnsiString Input)
{
  int error[] = { 2, 9, 5, 4, 1, 6, 7, 12, 19, 3, 1, 0, 21, 17 };
  int x;
  AnsiString Buffer = Input;

  if (encoded!=0)
  {
    int count = 0;

    for(x=Input.Length();x>=1;x--)
    {
      Buffer[x] = Input[x]-48+error[count];
      count++;
      if (count>=14)
        count=0;
    }
  }

  return Buffer;
}

3 个答案:

答案 0 :(得分:2)

以下是我如何翻译它。注意我不知道encoded来自哪里,所以我把它留了出来。诀窍是为缓冲区使用StringBuilder,以便可以改变字符,另一个选项是char数组。

public static string Decode(string input)
{
    int[] error = { 2, 9, 5, 4, 1, 6, 7, 12, 19, 3, 1, 0, 21, 17 };
    StringBuilder buffer = new StringBuilder(input);

    int count = 0;
    for (int x = input.Length - 1; x >= 0; x--) {
        buffer[x] = (char)(input[x] - 48 + error[count]);
        count++;
        if (count >= 14)
            count = 0;
    }

    return buffer.ToString();
}

然而,这输出“MY TOFTWARE INC”输入“{x;ƒ~sq{j | tLtuq”,所以我不确定问题是否与您的字符串或代码有关。

答案 1 :(得分:1)

我已经想出了这个,但它并没有完全回复预期的结果。你确定输入字符串吗?

输入和输出是字符串。

var encoded = true;
var input = "{x;ƒ~sq{j|tLtuq";
var output = Decode(input);
Console.WriteLine($"input \"{input}\", output \"{output}\"");

private static string Decode(string input)
{
    int[] error = { 2, 9, 5, 4, 1, 6, 7, 12, 19, 3, 1, 0, 21, 17 };
    var buffer = new char[input.Length];

    if (encoded)
    {
        int count = 0;

        for(var x=input.Length-1;x>=0;x--)
        {
            buffer[x] = (char) ((Convert.ToInt16(input[x])-48 + error[count]) & 0xFF);
            count++;
            if (count>=error.Length)
                count=0;
        }
        return new string(buffer)
    }
    return input;
}

调用此方法会将以下内容写入控制台:

  

输入“{x;ƒ~sq{j | tLtuq”,输出“MY bOFTWARE INC”

答案 2 :(得分:0)

我不知道它是否有帮助,但经过一些反向工程后,您可以使用以下错误数组(使用StringBuilder实现)来显示正确的信息。

int[] error = { 2, 9, 5, 4, 1, 6, 7, 12, 19, 3, 1, -6, 21, 17 };//MY SOFTWARE INC

它与字符在c ++和c#中的编码方式有关,因此您可以尝试使用System.Text.Encoding