Преобразование управляемого байтового массива в неуправляемую строку - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь преобразовать управляемый байтовый массив в std :: string в моей оболочке C ++ / CLI;тем не менее, позже я вижу испорченную память в куче.Просто хотел проверить, правильно ли я делаю конвертацию.Ниже мой метод 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);
    }
}

Что-то кажется неправильным в приведенном выше коде?

1 Ответ

1 голос
/ 14 марта 2012

Вы делаете ненужное явное копирование и играете с ручным распределением памяти.

Вы можете просто передать необработанный закрепленный указатель конструктору std::string:

string ByteArrayToStr(array<Byte>^ byteArray)
{
    pin_ptr<unsigned char> temp = &byteArray[0];
    return string(reinterpret_cast<char*>(temp), byteArray->Length);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...