你是对的Buffer.MemoryCopy
是 .Net 4.6 或更高版本,Buffer.BlockCopy
没有所需的过载,并且Array.Copy
也是不可能的。
您可以使用以下命令,但速度会很慢
fixed (byte* pSource = source, pTarget = target)
for (int i = 0; i < count; i++)
pTarget[targetOffset + i] = pSource[sourceOffset + i];
如果所有其他方法都失败,您可以从 msvcrt.dll 调用 memcpy
[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);
同样对于 .Net 4.5,您可以使用System.Runtime.CompilerServices.Unsafe https://www.nuget.org/packages/System.Runtime.CompilerServices.Unsafe/
Unsafe.CopyBlock 方法 https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.copyblock?view=dotnet-plat-ext-2.1
CopyBlock(Void*, Void*, UInt32)
从 1 复制指定为长整数值的多个字节
内存中的地址到另一个。
最后,您可以使用Marshal.Copy https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.copy?view=netframework-4.7.2如果你不介意以数组结束。但是它没有指向指针重载的指针。
将数据从托管数组复制到非托管内存指针,或者
从非托管内存指针到托管数组。