[英]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.