C++/CLI 将 byte* 转换为 Managed Byte[]

C++/CLI Conversion of byte* to Managed Byte[]

我在一个 C++/CLI 项目中,我有一个 byte* 变量,我想尽可能高效地将其完全转换为托管 array<byte>

目前,我看到的唯一方法是手动创建托管 array<byte> 对象,然后从 byte* 变量中复制单个字节,如下所示:

void Foo(byte* source, int bytesCount)
{
   auto buffer = gcnew array<byte>(bytesCount);

   for (int i = 0; i < bytesCount; ++i)
   {
      buffer[i] = source[i];
   }
}

有没有其他方法可以更有效地做到这一点?理想情况下,根本不必复制内存。

如果没有,有没有办法更干净地做到这一点?

您不能在不复制的情况下从非托管缓冲区创建托管数组。

但是,您不需要在循环中复制单个字节。您可以 pin 托管数组(参见 pin_ptr),然后将字节直接从非托管缓冲区复制到托管数组的内存中,例如 memcpy()或同等学历。

void Foo(byte* source, int bytesCount)
{
   auto buffer = gcnew array<byte>(bytesCount);

   {
      pin_ptr<byte> p = &buffer[0];
      byte *cp = p;
      memcpy(cp, source, bytesCount);
   }

   // use buffer as needed...
}