繁体   English   中英

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

[英]Writing a C# string to a preallocated unmanaged buffer using UTF8 encoding

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

  • 没有新的分配(因此,请不要引导我回答涉及创建字节数组或其他实例化的答案)
  • 没有过渡到非托管代码(没有pinvoke / calli)

当前,我正在使用OpCodes.Cpblk使用16位字符将原始字符串从C#复制到非托管缓冲区。 这为我提供了与在x64架构上使用非托管memcpy大致相同的性能,并且我确实需要吞吐量接近于此。

我正在考虑字符串固定char *并对其进行迭代,但是在性能方面,实现没有跳转表的编码器既麻烦又不太理想。

使用不安全的过载

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM