非托管 C++ 加密字符串转换为 C# byte[]
Posted
技术标签:
【中文标题】非托管 C++ 加密字符串转换为 C# byte[]【英文标题】:Unmanaged C++ encrypted string into C# byte[] 【发布时间】:2010-09-16 16:47:14 【问题描述】:我有一个从 C# 类库调用的非托管 C dll,该类库将字符串值加密为包含非 ascii 字符的加密字符串。我需要获取数据并将其二进制值写入文件,但 C# 将文本视为string
而不是byte[]
。
加密值通常包含特殊字符(\r
、\O
等)。当我使用某种类型的代码集(ascii、utf-7、utf-16)将返回的字符串转换为 C# 时,它会将特殊字符值写入 Windows 解释值而不是它们的实际二进制表示。
我的问题是如何将非托管 dll 中的数据提取到 byte[]
而不是字符串中,以便我可以使用 BinaryWriter
将其写入文件?
谢谢。
【问题讨论】:
你知道它是什么类型的字符串,编码是什么吗? (我的意思是原始字符串) 【参考方案1】:如果我理解正确,我想你可能希望 Encoding.GetBytes() 使用 UTF8?
【讨论】:
【参考方案2】:您是否尝试过使用 ASCIIEncoding 类?它应该将任何 UTF-8 字符转换为 '?' 的 ascii 字符
MSDN Page
用法
ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);
【讨论】:
【参考方案3】:您在使用 P/Invoke 吗?嗯...也许指定 [MarshalAs(UnmanagedType.*)] 会有所帮助。 此外,您可以创建一个中间 C 函数,将加密数据公开为 (void *)。这应该更容易进入 byte[]。
【讨论】:
以上是关于非托管 C++ 加密字符串转换为 C# byte[]的主要内容,如果未能解决你的问题,请参考以下文章