관리되는 바이트 배열을 관리되지 않는 문자열로 변환합니다
-
13-12-2019 - |
문제
관리되는 바이트 배열을 My 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);
}
. 제휴하지 않습니다 StackOverflow