将C++函数转换为 C#(字符串问题)
Converting C++ Function to C# (String problems)
我正在尝试将代码从C++转换为 C#,但我无法做到这一点......
std::string Cipher(std::string Str)
{
char Key[5] = { 'H', 'S', 'M', 'K', 'V' };
std::string Encrypted = Str;
for (unsigned int i = 0; i < Str.size(); i++)
{
Encrypted[i] = Str[i] ^ Key[i % (sizeof(Key) / sizeof(char))];
}
return Encrypted;
}
到目前为止,我在 C# 中得到的是这样的:
public string Cipher(string Str)
{
char[] Key = new char[5] { 'H', 'S', 'M', 'K', 'V' };
string Encrypted = Str;
for(int i = 0; i < Str.Length; i++)
{
Encrypted[i] = Str[i] ^ Key[i % ((Marshal.SizeOf(Key)) / sizeof(char))]; //line 29
}
return Encrypted;
}
但是我不断收到此错误:
Property or indexer 'string.this[int]' cannot be assigned to -- it is read only (on line 29)
我发现它与字符串的不变性有关,所以我尝试了这个:
public string Cipher(string Str)
{
char[] Key = new char[5] { 'H', 'S', 'M', 'K', 'V' };
string Encrypted = Str;
StringBuilder sb = new StringBuilder(Encrypted);
for (int i = 0; i < Str.Length; i++)
{
sb[i] = Str[i] ^ Key[i % ((Marshal.SizeOf(Key)) / sizeof(char))]; //line 30
}
return Encrypted;
}
但是,现在我收到此错误:
Cannot implicitly convert type 'int' to 'char'. An explicit conversion exists (are you missing a cast?) (on line 30)
有人可以帮忙吗?
谢谢
关闭!你使用StringBuilder是正确的。但是,^ -运算符(按位 XOR(使 C# 将结果作为 int。既然你知道它仍然是一个字符,只需添加 cast:
for (int i = 0; i < Str.Length; i++)
{
sb[i] = (char)(Str[i] ^ Key[i % ((Marshal.SizeOf(Key)) / sizeof(char))]); //line 30
}
另外,我不确定这是否与C++实现完全相同。 (sizeof(Key) / sizeof(char)
基本上是数组的长度。所以你应该在 C# 实现中使用 Key.length。所以更准确的是
for (int i = 0; i < Str.Length; i++)
{
sb[i] = (char)(Str[i] ^ Key[i % Key.Length]); //line 30
}
替换
Encrypted[i] = Str[i] ^ Key[i % ((Marshal.SizeOf(Key)) / sizeof(char))]; //line 29
跟
Encrypted[i] = Str[i] ^ Key[i % Key.Lenght]; //line 29
您可以将字符串中的字符替换为:
"1234567890123".Remove(9,1).Insert(9,"A")
不过,使用字符串生成器是一个更明智的选择。
相关文章:
- setlocale的C++土耳其字符串问题
- C++字符串问题-如何访问字符串元素
- 提升,从字符串问题中获得时间
- 字符串问题中的系统( "command" ) 字符串
- 从文件和字符串问题中读取
- 将C++函数转换为 C#(字符串问题)
- 有关字符串C++问题
- Visual Studio和Xcode之间的Chaiscript字符串问题
- 回文字符串问题:为什么我必须放+1而不是-1才能让这个代码工作
- Dll导入Marshal C++字符串问题
- 崩溃:字符串问题
- 正在寻找另一种解决二进制字符串问题的尝试
- C++ Win32 是字符串问题
- 迭代器字符串问题
- Python 3:Python/C API字符串问题
- 带有空格的C++字符串问题
- 有些字符串问题
- C++11 std::regex_replace()创建带有特定字符串问题的regexp
- Turbo C++的字符串问题
- 棘手的子字符串问题