[英]Trouble converting C++ method to 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;
}
这就是我的翻译方式。 注意,我不知道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();
}
但是,这会为输入“ {x;ƒ〜sq {j | tLtuq””输出“ MY TOFTWARE INC”,因此我不确定是字符串还是代码引起问题。
我已经提出了这个建议,但是它并没有完全返回预期的结果。 您确定输入字符串吗?
输入和输出是字符串。
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”
我不知道这是否有帮助,但是经过一些反向工程后,您可以使用以下错误数组(使用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.