我如何将const wchar_t *转换为System :: String?

时间:2013-03-29 02:35:35

标签: .net string c++-cli wchar-t

我需要将我的SHA1(wchar_t *)转换为普通的String ^才能在某个函数中使用它。有任何想法吗?我试过谷歌,但所有结果都与我的问题完全相反。 :\

注意:我使用的是C ++ .NET框架和Windows窗体应用程序

3 个答案:

答案 0 :(得分: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::wstringstd::string),则可以使用c_str()方法获取指针。那么你的代码可能是

const std::wstring const std_str1 = ...;
System::String^ const str1 = gcnew System::String(std_str1.c_str());

请参阅System.String和广泛讨论here

答案 1 :(得分:1)

如果在做Dan的解决方案时出现错误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());

答案 2 :(得分:1)

您也可以尝试:

#include <msclr\marshal_cppstd.h>

...

String^ managedString = msclr::interop::marshal_as<String^>(/* std::string or wchar_t * or const wchar_t * */);

您可以参考Overview of Marshaling in C++了解您可以使用的所有支持类型