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