我知道如何在 C# 中将 3D Int16 数组转换为 1D 字节数组,但我不知道如何使用 C++ 进行转换?
这取决于您希望如何在一维数组中排列行、列和深度。我看不出有任何转换它的理由,因为您可以按照您想要的方式随机访问这些元素。当您不需要时,没有理由承担此类手术的费用。如果您不将其存储在文件中或通过网络发送它,我无法理解您为什么要序列化它。
为什么你不能这样做:
__declspec( dllexport ) void cppMatrixCode(__int16*** matrix_3d, int width, int height, int depth)
{
//manipulate the matrix with matrix_3d[the row you want][col you want][depth you want]
//or to serialize:
for(int i = 0; i < width; i++)
for(int j = 0; j < height; j++)
for(int k = 0; k < depth; k++)
{
_int16 value = matrix_3d[i][j][k];
//now add value to another array or whatever you want.
}
}
in C#
[DllImport("YourDLLGoesHere")]
static extern void cppMatrixCode(short[,,] matrix_3d, int width, int height, int depth);
short[,,] matrix = new short[width, height, depth];
//add your values to matrix
cppMatrixCode(matrix, width, height, depth);
这应该只在 32 位系统上复制 128 个字节,或在 64 位系统上复制 160 个字节。
关于我在 C# 中使用 ConvertAll,哪一个会更快 C++ 或 C#?
这取决于您具体在做什么,但编写良好的 C++ 代码通常比 CLI 代码更快。
内存是否会翻倍,或者我可以将 C++ 库中的对象数据设置为指向我在 C# 中的相同卷?
您应该能够通过引用将 C# byte[] 传递给 c++ 函数,而无需复制任何数据。不过,我们需要更多关于您到底想要做什么的详细信息。