我需要将我的SHA1(wchar_t *)转换为普通的String ^才能在某个函数中使用它。有任何想法吗?我试过谷歌,但所有结果都与我的问题完全相反。 :\
注意:我使用的是C ++ .NET框架和Windows窗体应用程序
答案 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::wstring
或std::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++了解您可以使用的所有支持类型