簡體   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