在 C# 中替代 std::string [重复]
Posted
技术标签:
【中文标题】在 C# 中替代 std::string [重复]【英文标题】:Alternative to std::string in C# [duplicate] 【发布时间】:2014-03-31 15:29:59 【问题描述】:我一直在尝试找到一个替换字符串函数,它允许我在 C# 中使用类似于 std::string 的行为。我只需要它用于我从 C++ 移植到 C# 的一些代码,其中包含 std::strings。我读过关于将字符串转换为字节数组,然后从那里解决它,尽管我无法这样做。使用示例代码执行此操作的任何可能建议?请注意以下代码是用 C++ 编写的,使用 std::strings 而不是 C# Unicode 字符串。
C++ 代码
std::string DeMangleCode(const std::string& argMangledCode) const
std::string unencrypted;
for (uint32_t temp = 0; temp < argMangledCode.size(); temp++)
unencrypted += argMangledCode[temp] ^ (434 + temp) % 255;
return unencrypted;
错位输入:‚‡…ƒ
输出:1305
【问题讨论】:
但这不是 C++ 代码。 是的,它不是,它只是努力展示我在代码方面的真正意思。正如我所提到的,只需将字符串替换为 std::string 即可获得 C++ 版本的代码。 我认为您正在寻找的是Chars
方法。
我的 C/C++ 非常生锈,但 IIRC std::string
谈论 char
,而 char
是单字节的。在这种情况下,您应该使用byte[]
,而不是string
我们需要准确的代码,只有这样我们才能知道什么是准确的 C# 翻译。
【参考方案1】:
以下代码将为输入“‚‡…ƒ”返回“1305”。诀窍是弄清楚当字符串被破坏时使用了哪个代码页。这是代码页 1252。
static public string DeMangleCode(string argMangledCode)
Encoding enc = Encoding.GetEncoding(1252);
byte[] argMangledCodeBytes = enc.GetBytes(argMangledCode);
List<byte> unencrypted = new List<byte>();
for (int temp = 0; temp < argMangledCodeBytes.Length; temp++)
unencrypted.Add((byte)(argMangledCodeBytes[temp] ^ (434 + temp) % 255));
return enc.GetString(unencrypted.ToArray());
【讨论】:
非常感谢。我对这个代码页一无所知,尽管我只是在某个时候自己尝试过。感谢您更新答案。以上是关于在 C# 中替代 std::string [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 System::String^ (C# 字符串)转换为 C++ std::string [重复]
从无符号字符到 std::string 的 C++ 转换 [重复]
在 c++ 中为非托管 c# dll 使用 std::string