2

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

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

我的问题是如何将非托管 dll 中的数据提取到一个byte[]而不是一个字符串中,这样我就可以使用BinaryWriter?

谢谢。

4

3 回答 3

2

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

于 2008-10-11T17:54:55.677 回答
2

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

MSDN 页面

用法

ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);
于 2008-10-11T18:41:39.233 回答
0

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

于 2008-10-11T18:46:19.893 回答