我有一个非托管C dll我从C#类库调用,它将字符串值加密为包含非ascii字符的加密字符串。我需要获取数据并将其二进制值写入文件,但C#将文本视为string
而不是byte[]
。
加密值通常包含特殊字符(\r
,\O
等)。当我这样做时,使用某种类型的代码集(ascii,utf-7,utf-16)将返回的字符串转换为C#,它将特殊字符值写为Windows解释值而不是它们的实际二进制表示。
我的问题是如何将数据从非托管dll中提取到byte[]
而不是字符串中,以便我可以使用BinaryWriter
将其写入文件?
感谢。
答案 0 :(得分:2)
如果我理解正确,我认为您希望Encoding.GetBytes()可能使用UTF8?
答案 1 :(得分:2)
您是否尝试过使用ASCIIEncoding类?它应该将任何UTF-8字符转换为'?'
的ascii字符<强>用法强>
ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);
答案 2 :(得分:0)
你在使用P / Invoke吗?嗯......也许指定[MarshalAs(UnmanagedType。*)]会有所帮助。 此外,您可以创建一个中间C函数,而不是将加密数据公开为(void *)。这应该更容易进入一个字节[]。