繁体   English   中英

C / C ++ - 如何将Buffer.BlockCopy(C#)转换为C / C ++

[英]C/C++ - How can I convert Buffer.BlockCopy (C#) to C/C++

我在C#有以下功能:

public Matrix<float> ConcatDescriptors(IList<Matrix<float>> descriptors)
{
    int cols = descriptors[0].Cols;
    int rows = descriptors.Sum(a => a.Rows);

    float[,] concatedDescs = new float[rows, cols];

    int offset = 0;

    foreach (var descriptor in descriptors)
    {
        // append new descriptors
        Buffer.BlockCopy(descriptor.ManagedArray, 0, concatedDescs, offset, sizeof(float) * descriptor.ManagedArray.Length);
        offset += sizeof(float) * descriptor.ManagedArray.Length;
    }

    return new Matrix<float>(concatedDescs);
}

我正在尝试将其翻译为CC++ 我认为这是相当简单的,但是,我被困在线上:

Buffer.BlockCopy(descriptor.ManagedArray, 0, concatedDescs, offset, sizeof(float) * descriptor.ManagedArray.Length);

如何在CC++重新创建相同的代码行?

在C中,等价物将是memcpy

在C ++中,你仍然可以使用memcpy ,还有std::copy

请注意,C和C ++允许指针(或迭代器)进入数组的中间,所以当C#将句柄传递给整个数组和一个开始索引时,在C和C ++中,你需要做指针算术以找到之前的开始调用该函数。

还要注意字节数与对象数。 Buffer.BlockCopy测量起始索引和以字节为单位的项目数。 memcpy也以字节为单位测量项目数。 std::copy元素中的度量。 并且C和C ++指针算法对多个元素进行操作。 如果首先将指针转换为char*则元素和字节将变为相同。 (C和C ++ char正好是一个字节,不像C# char更像是C ++ wchar_t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM