将wchar_t*转换为字符串

Ana*_*s90 20 c++ string winapi wchar-t type-conversion

如何在win32控制台中将wchar_t*数组转换为std::stringvarStr.

Fel*_*rar 41

使用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;
Run Code Online (Sandbox Code Playgroud)

  • 完全错了.如果`txt`包含任何非ascii字符,则会失败.如果用`"..."替换"Hello World",那么`...`就变成了`&`.此*解决方案*非常有害,导致数据丢失. (14认同)
  • 警告:仅当源字符串由 ASCII 字符组成时才使用此选项。正如前面的评论所说,扩展(多字节)Unicode 字符可能会丢失或被垃圾替换。 (2认同)

Nor*_*elm 8

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

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

wchar_t* characters=L"Test";
std::wstring string(characters);
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您特别需要非宽字符串怎么办? (4认同)