不带副本的指针中的字节[]



我有一个字节*,我想把它变成一个字节[]。现在我不想复制它,而且我知道字节*的长度。

我可以使用memcpy,但我希望避免将字节*中的字节复制到新的字节数组中。有办法做到这一点吗?我对任何方式都持开放态度,无论它使用P/Invoke,还是不安全的代码,不管怎样。感谢

编辑:我正在做的是将UTF-8字节*转换为另一种编码格式。例如,我存储的数据是ALWAYS Utf-8,但我想将其转换为任何其他格式。

我这样做:

char[] chars = new char[size];
Encoding.UTF8.GetChars(utf8Array, 0, utf8Array.Length, chars, 0);
byte[] convertedBytes = someOtherEncoding.GetBytes(chars);

这就是为什么我需要utf8Array。此外,GetChars有一个指针方法,但该方法在内部复制字节。

编号。NET不提供将非托管指针直接转换为托管数组的机制。最接近的方法是首先创建托管数组,然后在unsafe上下文中,获取数组中数据的指针,并将其用作非托管数组。然而,你的问题很模糊,不清楚这是否是你的选择。

也就是说,我怀疑现实世界中是否有这样的要求。你应该解释为什么你认为这是你需要做的事情。看起来你可能有XY问题。或者甚至可能根本没有问题,即这是一个过早的优化。事实上,文本编码/重新编码场景很少是程序中的瓶颈,也不值得为优化付出英勇的努力。

是的,复制字节比不复制字节慢。但是,在大多数现代体系结构上,复制字节是一项非常快速的操作。实际的编码转换本身需要做更多的工作。

对你来说,发布一个新问题可能是个好主意,这个问题的重点是让你相信你在这里问的问题有一个答案会很有用的原始问题。在这个新问题中,请确保你提供了一个很好的最小、完整和可验证的代码示例。确保您还详细解释了该代码的作用,您希望它做什么,以及您需要帮助的具体内容

如果您的问题涉及性能问题,请确保您的代码示例正确地证明了该性能问题(即,是一个设计良好的基准测试(。还要确保你解释了性能目标是什么,以及为什么你认为这个目标是可以实现的,值得投入精力;代码示例应该通过在上下文中显示瓶颈来说明这一点。

最新更新