字节数组byte[]和非托管资源(IntPtr)之间相互复制数据
1、使用Span<byte>
可以装杯,就是不能在异步方法里用,因为需要unsafe
C#
//假设这里从非托管资源获得数据指针
IntPtr packet;
//你知道了数据长度
int packetSize = 2048;
//从指针复制到 字节数组
byte[] buffer = new byte[packetSize];
new Span<byte>((byte*)packet, (int)packetSize).CopyTo(buffer.AsSpan(0, (int)packetSize));
//从字节数组复制到指针
buffer.Span.CopyTo(new Span<byte>((byte*)packet, buffer.Length));
2、使用 Marshal.Copy
源码里也是用的Span<byte>,在异步方法里可以用这玩意儿
C#
//从指针复制到 字节数组
Marshal.Copy(packet,buffer,0,packetSize);
//从字节数组复制到指针
Marshal.Copy(buffer,0,packet,packetSize);