C# 将结构数组复制到 double 组

标签 c# memcpy value-type

[StructLayout(LayoutKind.Sequential)]
public struct Demo
{
    double X;
    double Y;
}


var data = new Demo[128];

FillWithMeaningfulValues(data);

double[] doubles;

Copy(data, out doubles); // ?

如何将演示数组复制到 double 组中,而不必 for(...) 遍历每个元素?在 C++ 中,我会使用 memcpy,但在 C# 中,我没有在 Marshal.Copy 中找到我需要的东西。

void MethodIDoNotWantToUse(Demo[] demo, out double[] doubles)
{
    doubles = new double[demo.Length * 2];
    for(int i = 0, j = 0; i < demo.Length; ++i)
    {
        doubles[j++] = demo[i].X;
        doubles[j++] = demo[i].Y;
    }  
}

void MethodIWouldPreferToUse(Demo[] demo, out double[] doubles)
{
    doubles = new double[demo.Length * 2];
    memcopy(doubles, demo, demo.Length * 2 * sizeof(double));
}

最佳答案

你会做这样的事情。 Marshal.Copy 确实提供了您所需要的。

Demo[] array = new Demo[2];
array[0] = new Demo {X = 5.6, Y= 6.6};
array[1] = new Demo {X = 7.6, Y = 8.6};
GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned);
try
{
    IntPtr pointer = handle.AddrOfPinnedObject();
    double[] copy = new double[array.Length*2];//This length may be calculated
    Marshal.Copy(pointer, copy, 0, copy.Length);
}
finally
{
    if (handle.IsAllocated)
        handle.Free();
}

关于C# 将结构数组复制到 double 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23649300/

相关文章:

c++ - memcpy 没有按预期进行

reference - 我什么时候使用浅拷贝?

c# - Math.Net Numerics - 如何运行示例

C: 带有 void* 指针的 memcpy 段错误

c - 为什么这段 C 代码会崩溃

c# - Java 和 C# 中 "primitive"、 "value type"、 "struct"、 "class"、 "wrap"的定义

c# - 如何从 DateTime 中删除值?

c# - 创建自定义面板控件

c# - 泛型变量定义泛型的目的是什么

c# - 编写一个不是容器的泛型类? [C#]