在 C++/CLI 中从本机转换为管理无符号短的最快方法



我有一个函数可以在 C++/CLI 中将无符号短代码从本机代码转换为托管代码,但我的方法需要调用复制两次。还有其他方法可以使此过程更快吗?

//input
unsigned short* m_rawDataPtr; 
//output
array<uns16>^ m_rawData;
...
int size = data.GeSize();
array<short>^ dataSigned = gcnew array<short>( size / 2);
m_rawData = gcnew array<unsigned short>((int)size / 2);
Marshal::Copy(IntPtr((void*)(m_rawDataPtr),dataSigned, 0, dataSigned->Length);
System::Buffer::BlockCopy(dataSigned, 0, m_rawData, 0, (Int32)(size));

谢谢

你可以尝试这样的事情:

//input
unsigned short* m_rawDataPtr; 
//output
array<unsigned short>^ m_rawData;
cli::pin_ptr<unsigned short> pinnedManaged = &m_rawData[0];
std::memcpy(pinnedManaged , m_rawDataPtr, arrayLength * sizeof(unsigned short));

最新更新