[英]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);
}
我正在嘗試將其翻譯為C
或C++
。 我認為這是相當簡單的,但是,我被困在線上:
Buffer.BlockCopy(descriptor.ManagedArray, 0, concatedDescs, offset, sizeof(float) * descriptor.ManagedArray.Length);
如何在C
或C++
重新創建相同的代碼行?
在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.