gpt4 book ai didi

c# - .NET 4.6 之前的 Buffer.MemoryCopy 替代品

转载 作者:太空狗 更新时间:2023-10-29 23:04:58 31 4
gpt4 key购买 nike

我正在尝试将一些 .NET 4.6 代码降级到 .NET 4.5。

这是我目前正在使用的代码块:

fixed (byte* destination = dataBytes)
{
Buffer.MemoryCopy(data, destination, dataLength, dataLength);
}

databyte* 类型所以我不知道 Buffer.BlockCopy() 是否是一个合理的替代品,因为它接受数组.

有什么想法吗?

最佳答案

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

Unsafe.CopyBlock Method

CopyBlock(Void*, Void*, UInt32)

Copies a number of bytes specified as a long integer value from one address in memory to another.


最后,您可以使用 Marshal.Copy如果您不介意以数组结尾。但是它没有指向指针重载的指针。

Copies data from a managed array to an unmanaged memory pointer, or from an unmanaged memory pointer to a managed array.

关于c# - .NET 4.6 之前的 Buffer.MemoryCopy 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54453119/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com