gpt4 book ai didi

c# - 如何从 C# 获取和发送 UTF-8 中的字符串到 C++ DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:28 24 4
gpt4 key购买 nike

我对此有疑问:

FileStream stream = new FileStream("Configuration.xml", FileMode.Open);
Encoding u8 = new UTF8Encoding(true, true);

StreamReader reader = new StreamReader(stream, u8);
string str = reader.ReadToEnd();

Configuration.xml 是 utf-8,但 str 不是,那么我应该将这个 str 发送到我的 dll,dll 函数不能使用 noUTF-8

最佳答案

如果您确实需要以 C# 字符串开头,则必须将该字符串转换为 UTF-8,并存储在字节数组中:

byte[] utf8 = Encoding.UTF8.GetBytes(str);

然后将该字节数组传递给 DLL。请注意,字节数组不会以空值终止,因此如果 DLL 需要空值终止符,您将需要显式添加它。

另一方面,避免从 UTF-8 到 UTF-16 再回到 UTF-8 的过程可能要容易得多。因此,不要使用 StreamReader 来读取字符串。将文件内容直接读入字节数组。

byte[] utf8 = File.ReadAllBytes("Configuration.xml");

同样,这不会有空终止符,因此如果需要,您必须添加它。

如果您确实需要空终止符,那么使用 FileStream 可能会更容易:

  1. 以读取模式创建 FileStream
  2. 通过读取 Length 属性找到文件的大小。
  3. 分配一个长度为 Stream.Length+1 字节的字节数组。新内存将被零初始化,因此最后一个字节已经包含您的空终止符。
  4. 对文件流调用 Read 以将 Stream.Length 个字节读入字节数组。

像这样:

byte[] ReadAsNullTerminatedByteArray(string filename)
{
using (FileStream fs = File.OpenRead(filename))
{
byte[] bytes = new byte[fs.Length+1];
fs.Read(bytes, 0, fs.Length);
return bytes;
}
}

关于c# - 如何从 C# 获取和发送 UTF-8 中的字符串到 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com