如何将 const wchar_t* 转换为 System::String?
Posted
技术标签:
【中文标题】如何将 const wchar_t* 转换为 System::String?【英文标题】:How do i convert const wchar_t* to System::String? 【发布时间】:2013-03-19 18:08:57 【问题描述】:我需要将我的 SHA1 (wchar_t*) 转换为普通的 String^ 以便在某个函数中使用它。有任何想法吗?我尝试了谷歌,但所有结果都与我的问题完全相反。 :\
注意:我正在使用 C++.NET 框架和 Windows 窗体应用程序
【问题讨论】:
@Dan 发生错误。错误 2 错误 C2664: 'System::String::String(const wchar_t *)' : 无法将参数 1 从 'std::string' 转换为 'const wchar_t *' c:\users\jeremy\documents\visual studio 2010\项目\启动器\启动器\Form1.h 289 可能有点晚了,但是存储在 10 个wchar_t
对象 a) 中的原始 SHA1 哈希很可能不是有效的 Unicode(无效字符,无效代理); b) 有千分之一的机会包含嵌入的 NULL(这意味着仅使用 gcnew 将截断)。如果 OP 是从十六进制表示转换,那不是问题。
【参考方案1】:
使用构造函数;像这样:
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。
【讨论】:
【参考方案2】:如果在执行 Dan 的解决方案时收到错误 cannot convert parameter 1 from 'std::string' to 'const wchar_t *'
,那么您问错了问题。与其问如何将wchar_t*
转换为String^
,不如问如何将std::string
转换为String^
。
使用内置的c_str
函数从std::string
中获取一个普通的char*
,并将其传递给构造函数。
std::string unmanaged = ...;
String^ managed = gcnew String(unmanaged.c_str());
【讨论】:
【参考方案3】:你也可以试试:
#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++ 了解您可以使用的所有支持类型
【讨论】:
以上是关于如何将 const wchar_t* 转换为 System::String?的主要内容,如果未能解决你的问题,请参考以下文章
我想将 std::string 转换为 const wchar_t *
我想将std :: string转换为const wchar_t *