Convertendo matriz de bytes gerenciada em string não gerenciada
-
13-12-2019 - |
Pergunta
Estou tentando converter uma matriz de bytes gerenciada em std::string em meu wrapper C++/CLI;no entanto, estou vendo alguma memória corrompida na pilha mais tarde.Só queria verificar se estou fazendo a conversão corretamente.Abaixo está meu método 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);
}
}
Alguma coisa parece errada no código acima?
Solução
Você está fazendo uma cópia explícita desnecessária e brincando com uma alocação manual de memória.
Você poderia simplesmente passar o ponteiro fixado bruto para std::string
construtor:
string ByteArrayToStr(array<Byte>^ byteArray)
{
pin_ptr<unsigned char> temp = &byteArray[0];
return string(reinterpret_cast<char*>(temp), byteArray->Length);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow