使用UTF8编码将C#字符串写入预分配的非托管缓冲区

时间:2012-01-31 19:56:01

标签: c# utf-8 clr unmanaged unmanaged-memory

我需要将C#字符串写入编码为Utf8的预分配非托管缓冲区。 回复之前,请阅读以下 要求

  • 新分配(请不要指导我参与创建字节数组或其他实例化的答案)
  • 过渡到非托管代码(没有pinvoke / calli)

目前,我正在使用OpCodes.Cpblk将原始字符串从C#复制到使用16位字符的非托管缓冲区。这给了我与在x64架构上使用非托管memcpy大致相同的性能,我真的需要吞吐量接近它。

我正在考虑将修复字符串作为 char *并对其进行迭代,但是实现没有跳转表的编码器既麻烦又不够理想表现。

1 个答案:

答案 0 :(得分:6)

使用不安全的重载

public override unsafe int GetChars(byte* bytes, int byteCount, char* chars, int charCount)

的UTF8Encoding-class。您需要指定指向字符串的指针和将接收字符的字节缓冲区。它会将UTF-8字符复制到其中。不会发生任何分配,但需要不安全的代码。