تحويل مجموعة البايت المُدارة إلى سلسلة غير مُدارة

StackOverflow https://stackoverflow.com//questions/9694341

  •  13-12-2019
  •  | 
  •  

سؤال

أحاول تحويل مصفوفة بايت مُدارة إلى 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);
    }
}

هل يبدو أن هناك أي خطأ في الكود أعلاه؟

هل كانت مفيدة؟

المحلول

أنت تقوم بعمل نسخة صريحة غير ضرورية وتلعب بتخصيص الذاكرة يدويًا.

يمكنك فقط تمرير المؤشر المثبت الخام إلى std::string البناء:

string ByteArrayToStr(array<Byte>^ byteArray)
{
    pin_ptr<unsigned char> temp = &byteArray[0];
    return string(reinterpret_cast<char*>(temp), byteArray->Length);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top