gpt4 book ai didi

c++ - 可以将 .Net String 交给 fn(const char16_t* str) w/o 复制吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:03 26 4
gpt4 key购买 nike

我想使用接受 UTF16-LE 字符串作为 (const char16_t* str, size_t length) 参数的库函数。 length 参数只需要为非空终止的字符串提供。该函数将复制字符串并处理拷贝。

.Net 的字符串作为 UTF16 保存在内存中 - 假设它们以小端编码存储,应该能够固定字符串,获取内部指针并将其提供给这个库函数而无需额外的拷贝,因为无论如何图书馆都会复制它。

这可能吗,在什么情况下从性能角度来看值得这样做(我相信固定对象不是免费的)?

(这是一个应用程序的最内层循环,该应用程序基本上将大量字符串从 A 复制到 B,复制部分是当前的瓶颈,因此加快速度是有意义的)。

编辑 这个问题几乎是重复的,所以暂时删掉了。但这并不是另一个问题的重复,该问题询问如何以 const wchar_t* 访问数据,而我需要的是 const char16_t*

最佳答案

是的,可以做到。

PtrToStringChars 允许我们访问内部 const wchar_t* 而无需复制。现在所需要做的就是将 reinterpret_cast 转换为 const char16_t*:

void useStringInCLib(System::String^ s)
{
pin_ptr<const wchar_t> wch = PtrToStringChars(s);
const char16_t *chars = reinterpret_cast<const char16_t*>(wch);
long charLen = s->Length;
// long byteLen = charLen + charLen; // 2 byte wide characters
use_it(chars, charLen);
}

关于c++ - 可以将 .Net String 交给 fn(const char16_t* str) w/o 复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54434279/

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