将 wchar_t* 转换为字符串 [重复]
Posted
技术标签:
【中文标题】将 wchar_t* 转换为字符串 [重复]【英文标题】:Conversion of wchar_t* to string [duplicate] 【发布时间】:2015-02-27 12:13:48 【问题描述】:如何在 win32 控制台中将 wchar_t*
数组转换为 std::string
varStr。
【问题讨论】:
***.com/questions/4339960/… 请显示您的代码(Win32 API)函数 【参考方案1】:使用wstring,看这段代码:
// Your wchar_t*
wchar_t* txt = L"Hello World";
wstring ws(txt);
// your new String
string str(ws.begin(), ws.end());
// Show String
cout << str << endl;
【讨论】:
完全错误。如果txt
包含任何非 ascii 字符,则会失败。如果将"Hello World"
替换为"…"
,则…
变为&
。此解决方案危害极大,会导致数据丢失。
警告:仅当源字符串由 ASCII 字符组成时才使用此选项。正如之前的评论所说,扩展(多字节)Unicode 字符可能会丢失或被垃圾替换。【参考方案2】:
您应该使用属于命名空间 std 的 wstring 类。它有一个构造函数,它接受 wchar_t* 类型的参数。
这是一个使用这个类的完整示例。
wchar_t* characters=L"Test";
std::wstring string(characters);
您不必使用包含 String.begin() 和 String.end() 的构造函数,因为 std::wstring 的构造函数会自动分配内存来存储 wchar_t 数组并将数组复制到分配的内存中。
【讨论】:
如果你特别需要一个非宽字符串怎么办? 我删除了我的评论,因为我在评论中描述的解决方案似乎不起作用。以上是关于将 wchar_t* 转换为字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 wostringstream 转换为 wchar_t* 乱码值
如何定义宏以将连接的char字符串转换为C中的wchar_t字符串