从 byte* 转换为 byte[]

4

如何将指针转换为字节数组?

第一个字节表示接下来要跟随的字节数。


这真的是C#问题还是C/C++问题? - Oleg
2个回答

7

安全的做法是复制指向的数据。

如果您有一个byte*,那么您当然可以自己编写代码:

byte* source = whatever;
int size = source[0]; // first byte is size;
byte[] target = new byte[size];
for (int i = 0; i < size; ++i)
    target[i] = source[i+1];

轻而易举。

如果你手上有一个IntPtr而不是byte*,那么你可以使用这个有帮助的方法:

http://msdn.microsoft.com/en-us/library/ms146631.aspx

在Marshal类中有很多有用的方法。


随机观察:我一直觉得 Buffer.BlockCopy 没有 byte* 的重载很奇怪。当然,我需要使用 unsafe 的情况也非常少见... - Marc Gravell
从你的措辞中,似乎有一种不安全的方式可以使最终的 byte[] 引用指向未复制的数据。我怀疑这是可能的。 - tm1

3

嗯,byte*不是数组对象。你可以使用fixed等方法获取数据的地址,但任意的byte*并不一定是数据的起始位置 - 它可能在偏移量17处。

因此,我建议:

  • 传递byte[]
  • (或)创建一个新的byte[],并复制你想要的数据

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接