sách gpt4 ai đã đi

C/C++ - Cách chuyển đổi Buffer.BlockCopy (C#) sang C/C++

In lại 作者:太空宇宙 更新时间:2023-11-04 08:45:25 31 4
mua khóa gpt4 Nike

我在 C# 中有以下函数:

public Matrix ConcatDescriptors(IList<>> 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(concatedDescs);
}

我正在尝试将其翻译成C hoặcC++。我认为这很简单,但是,我被困在了线上:

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

如何在 C hoặc C++ 中重新创建同一行代码?

1 Câu trả lời

在 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)

关于c# - C/C++ - 如何将 Buffer.BlockCopy (C#) 转换为 C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865836/

31 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com