我正在尝试将托管字节数组转换为 C++/CLI 包装器中的 std::string ;但是,我稍后在堆中看到一些损坏的内存。只是想检查我的转换是否正确。下面是我的 CLI 方法:
string ByteArrayToStr(array<Byte>^ byteArray)
{
int size = byteArray.Length;
IntPtr pnt = Marshal::AllocHGlobal(size + 1);
char* chararray = (char*)pnt.ToPointer();
try
{
Marshal::Copy(byteArray, 0, pnt, size);
*(chararray + size) = 0;
return string(chararray);
}
finally
{
Marshal::FreeHGlobal(pnt);
}
}
上面的代码有什么问题吗?
最佳答案
您正在执行不必要的显式复制并使用手动内存分配。
您可以将原始固定指针传递给 std::string
构造函数:
string ByteArrayToStr(array<Byte>^ byteArray)
{
pin_ptr<unsigned char> temp = &byteArray[0];
return string(reinterpret_cast<char*>(temp), byteArray->Length);
}
关于c++ - 将托管字节数组转换为非托管字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694341/