下面有一个 C++ 函数,它以 unsigned char 格式返回数据**
MyCPPFunc(unsigned char** ppData, int &nSize)
我想将它转换为 C# 中的浮点数组。问题是 CPP 返回的数据的内部表示可能是 char\ushort\uint\RGB 等。如果我如下使用,
var srcArray = new byte[nSize];
Marshal.Copy(pCPPData, srcArray, 0, nSize/4);
outDataArray = Array.ConvertAll<byte, float>(srcArray, Convert.ToSingle);
它将每四个连续字节转换为浮点数,而内存中的数据可能具有不同的数据类型长度(可能是 ushort、uchar、RGB 等)
考虑到 c++ 库确实支持许多数据类型并在该类型的内存中返回数据,如何以最佳性能方式执行此操作。(尽管由 uchar** 表示)
我需要这样的东西,如下所示。其中 dataTypeLen 可以是 1 代表 char,2 代表 short 等等。
Array.Convert(pCPPData, 0, pFloatArray, dataTypeLen, floatArrLen);
不安全的代码也足够了。