将wchar_t*转换为字符串

37

如何将win32控制台中的wchar_t*数组转换为std::string变量varStr。


https://dev59.com/8W855IYBdhLWcg3wcz1h - RC Brand
请展示你的代码,包括(Win32 API)函数。 - grisha
2个回答

59

使用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;

47
完全错误。如果 txt 包含任何非 ASCII 字符,此解决方案将失败。如果你将 "Hello World" 替换为 "...",那么 ... 将变成 &。这个“解决方案”极具破坏性,会导致数据丢失。 - user1180790
3
警告:仅在源字符串由ASCII字符组成时使用此选项。正如先前的评论所说,扩展(多字节)Unicode字符可能会丢失或被替换为垃圾。 - Simón
编译器还会警告可能在这里丢失数据。 - qz-

10

您应该使用属于命名空间std的wstring类。它有一个构造函数,可以接受wchar_t*类型的参数。

以下是使用此类的完整示例。

wchar_t* characters=L"Test";
std::wstring string(characters);

您不必使用包含String.begin()和String.end()的构造函数,因为std::wstring的构造函数会自动分配内存来存储wchar_t数组,并将数组复制到分配的内存中。


4
如果您需要一个非宽字符串怎么办? - rollsch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接