将 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" 替换为"…",则 变为&amp;。此解决方案危害极大,会导致数据丢失。 警告:仅当源字符串由 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* 乱码值

无法将“wchar_t”转换为“LPCSTR”[重复]

如何将char*转换为wchar

如何定义宏以将连接的char字符串转换为C中的wchar_t字符串

将 UTF-16(Windows 上的 wchar_t)转换为 UTF32

如何将 std::string 转换为 WCHAR