Как мне конвертировать const wchar_t* в System::String?
Мне нужно преобразовать мой SHA1 (wchar_t*) в обычную строку ^, чтобы использовать его в определенной функции. Есть идеи? Я попробовал Google, но все результаты были прямо противоположны моему вопросу.:\
ПРИМЕЧАНИЕ. Я использую C++.NET Framework и приложения Windows Forms.
3 ответа
Используйте конструктор; как это:
const wchar_t* const pStr1 = ...;
System::String^ const str1 = gcnew System::String(pStr1);
const char* const pStr2 = ...;
System::String^ const str2 = gcnew System::String(pStr2);
Если вы используете стандартные строковые классы C++ (std::wstring
или же std::string
), вы можете получить указатель с c_str()
метод. Ваш код тогда может быть
const std::wstring const std_str1 = ...;
System::String^ const str1 = gcnew System::String(std_str1.c_str());
Смотрите System.String и подробное обсуждение здесь.
Вы также можете попробовать:
#include <msclr\marshal_cppstd.h>
...
String^ managedString = msclr::interop::marshal_as<String^>(/* std::string or wchar_t * or const wchar_t * */);
Вы можете обратиться к разделу Обзор Marshaling в C++ для всех поддерживаемых типов, которые вы можете использовать
Если при выполнении решения Дэна вы получаете ошибку cannot convert parameter 1 from 'std::string' to 'const wchar_t *'
тогда вы задаете не тот вопрос. Вместо того, чтобы спрашивать, как конвертировать wchar_t*
в String^
, вы должны спросить, как конвертировать std::string
в String^
,
Используйте встроенный c_str
функция, чтобы получить равнину char*
вне std::string
и передать это конструктору.
std::string unmanaged = ...;
String^ managed = gcnew String(unmanaged.c_str());