非托管C++将字符串加密为C#字节[]
本文关键字:字节 加密 字符串 C++ | 更新日期: 2023-09-27 17:48:48
我从C#类库调用了一个非托管的C dll,它将字符串值加密为包含非ascii字符的加密字符串。我需要获取数据并将其二进制值写入文件,但C#将文本视为string
而不是byte[]
。
加密值通常包含特殊字符('r
、'O
等)。当我使用某种类型的代码集(ascii、utf-7、utf-16)将返回的字符串转换为C#时,它会将特殊字符值写入Windows解释的值,而不是它们的实际二进制表示。
我的问题是,如何将非托管dll中的数据拉入byte[]
而不是字符串,以便使用BinaryWriter
将其写入文件?
谢谢。
如果我理解正确,我认为您想要Encoding.GetBytes()可能使用UTF8?
您尝试过使用ASCIIEncoding类吗?它应该将任何UTF-8字符转换为"?"的ascii字符
MSDN页面
用法
ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);
您正在使用p/Invoke吗?嗯…也许指定[MarshalAs(UnmanagedType.*)]会有所帮助。此外,您可以创建一个中介C函数,将加密的数据公开为(void*)。这应该更容易进入字节[]。