非托管C ++加密字符串转换为C#byte []

时间:2008-10-11 17:35:58

标签: c# c++ arrays encryption marshalling

我有一个非托管C dll我从C#类库调用,它将字符串值加密为包含非ascii字符的加密字符串。我需要获取数据并将其二进制值写入文件,但C#将文本视为string而不是byte[]

加密值通常包含特殊字符(\r\O等)。当我这样做时,使用某种类型的代码集(ascii,utf-7,utf-16)将返回的字符串转换为C#,它将特殊字符值写为Windows解释值而不是它们的实际二进制表示。

我的问题是如何将数据从非托管dll中提取到byte[]而不是字符串中,以便我可以使用BinaryWriter将其写入文件?

感谢。

3 个答案:

答案 0 :(得分:2)

如果我理解正确,我认为您希望Encoding.GetBytes()可能使用UTF8?

答案 1 :(得分:2)

您是否尝试过使用ASCIIEncoding类?它应该将任何UTF-8字符转换为'?'

的ascii字符

MSDN Page

<强>用法

ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);

答案 2 :(得分:0)

你在使用P / Invoke吗?嗯......也许指定[MarshalAs(UnmanagedType。*)]会有所帮助。 此外,您可以创建一个中间C函数,而不是将加密数据公开为(void *)。这应该更容易进入一个字节[]。