C++方法转换为 C# 时出现问题

Trouble converting C++ method to C#

本文关键字:问题 方法 转换 C++      更新时间:2023-10-16

我正在尝试翻译一种使用自行开发的加密形式的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;
}

以下是我的翻译方式。 注意我不知道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",所以我不确定问题是否出在您的字符串或代码上。

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

输入和输出为字符串。

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

调用此函数会将以下内容写入控制台:

input "{

x;ƒ~sq{j|tLtuq", output "MY bOFTWARE INC">

我不知道

它是否有帮助,但经过一些反向工程处理后,您可以使用以下错误数组(使用 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