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?

Foi útil?

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
scroll top