C++方法转换为 C# 时出现问题
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();
}
但是,这将输出"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
。
相关文章:
- 最小硬币更换问题(自上而下方法)
- 使用同一类中的方法重新分配字段时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 此动态编程问题的自上而下方法
- 此解决方案中生成更改的方法数量(自上而下)有什么问题?
- 使用模板方法为标头提供空 cpp 时出现问题
- 这种针对 N Queen 问题的回溯方法不正确吗?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- CreateFileA方法出现问题
- 必须使用尾随返回类型的示例,因为无法用旧方法解决问题
- 双重检查创建单例问题的方法
- C++ 指针问题 - 通过方法更新指针
- C++隐式/显式模板方法专用化问题
- 迭代快速排序方法的分区算法问题
- 单独的类声明和方法定义文件问题
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- 如何通过动态规划方法解决这个问题?
- C++ 03 类模板 这是转换构造函数还是转换运算符?以及如何声明解决此问题的方法
- 一个c++语法问题:方法的类