【发布时间】:2019-01-30 06:09:43
【问题描述】:
我想使用一个接受 UTF16-LE 字符串作为(const char16_t* str, size_t length) 参数的库函数。 length 参数只需要为非空终止的字符串提供。该函数将复制字符串并处理副本。
.Net 的字符串作为 UTF16 保存在内存中 - 假设它们以小端编码存储,应该能够固定字符串,获取内部指针并将其提供给该库函数而无需额外的副本,因为无论如何图书馆都会复制它。
这可能吗?在什么情况下从性能角度来说值得(我相信固定对象不是免费的)?
(这是在一个应用程序的最内层循环中,它基本上将大量字符串从 A 复制到 B,而复制部分是当前的瓶颈,因此加快这一速度是有意义的)。
编辑 这个问题几乎是重复的,所以我暂时删除了它。但它与另一个问题并不完全重复,它询问以const wchar_t* 访问数据,而我需要的是const char16_t*。
【问题讨论】:
-
您想通过将字符串传递给本机 dll 来从 .Net 代码中调用 c++ .dll 中的函数吗?
-
@xMRi 差不多。我删除了这个问题,但后来决定取消删除它,因为您的链接转换为
const wchar_t*,这意味着,我们还没有,没有reinterpret_cast。 -
由于数据在内部存储为 wchar_t ,因此无法将其用作普通的 char* 数组,而无需复制它!您可以使用 char* 但每个 char 始终有 2 个字节...
-
@xMRi 你看到我的回答了吗?我实际上就是这样使用它的。