如何将(托管到非托管)数组<system :: byte ^ =“”>转换为byte *?</system :: byte>

时间:2011-10-31 11:51:11

标签: c++-cli

我需要帮助才能进行此类转换:

byte* bytes = Battle::Storm::GetBytes(0);

现在我收到了错误:

  

错误3错误C2440:'初始化':无法从'cli :: array ^'转换为'byte *'

我该怎么做?

2 个答案:

答案 0 :(得分:15)

从错误消息我明白Battle::Storm::GetBytes(0);返回一个多维数组,其形式为cli::array<Byte,dimension> ^

将其转换为原生unsigned char*

array<Byte,N> ^ byteMultiArray = Battle::Storm::GetBytes(0);
pin_ptr<unsigned char> array_pin = &byteArray[0, ... ,Nth 0]; 
unsigned char * nativeArray = array_pin;

这里数字N是数组的维数。

//for N = 2  
pin_ptr<unsigned char> array_pin = &byteArray[0,0];
//for N = 4  
pin_ptr<unsigned char> array_pin = &byteArray[0,0,0,0];

答案 1 :(得分:10)

你可以使用pin_ptr&lt;&gt;得到非托管数组

array<Byte>^ arr =  gcnew array<Byte>(100) ;
pin_ptr<unsigned char> pUnmanagedArr = &arr[0];