تحويل مجموعة البايت المُدارة إلى سلسلة غير مُدارة
-
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);
}
لا تنتمي إلى StackOverflow