c++ string 转 wstring
时间: 2023-06-21 17:09:09 浏览: 73
可以使用 `std::wstring_convert` 类或者 `std::wstringstream` 类来进行 `std::string` 和 `std::wstring` 之间的转换。
使用 `std::wstring_convert` 类:
```c++
#include <locale>
#include <codecvt>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wide_str = converter.from_bytes(str);
```
其中 `str` 是要转换的 `std::string` 对象,`wide_str` 是转换后的 `std::wstring` 对象。
使用 `std::wstringstream` 类:
```c++
#include <sstream>
std::wstringstream wss;
wss << std::wstring(str.begin(), str.end());
std::wstring wide_str = wss.str();
```
同样地,`str` 是要转换的 `std::string` 对象,`wide_str` 是转换后的 `std::wstring` 对象。
相关问题
c++string转wstring
在C++中,可以使用`std::wstring`类来处理宽字符字符串。要将C++`string`转换为`wstring`,可以使用`std::wstring`类的构造函数,该构造函数接受一个C风格的字符串(即以空字符结尾的字符数组)作为参数。
以下是将C++`string`转换为`wstring`的示例代码:
```cpp
#include <iostream>
#include <string>
#include <locale>
int main() {
std::string inputString = "Hello, world!";
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring outputWString = converter.from_bytes(inputString);
std::wcout << outputWString << std::endl;
return 0;
}
```
在上面的示例中,我们首先定义了一个C++`string`对象`inputString`,它包含要转换为`wstring`的文本。然后,我们使用`std::wstring_convert`类将C++`string`转换为宽字符字符串。这里使用了`std::codecvt_utf8<wchar_t>`转换器,它将UTF-8编码的C++字符串转换为宽字符字符串。最后,我们将转换后的宽字符字符串输出到标准输出流中。
需要注意的是,为了正确地转换C++字符串为宽字符字符串,我们需要使用本地化(locale)相关的类和函数。上述示例代码中使用了标准库中的`std::locale`类和`std::codecvt_utf8`转换器。此外,为了确保输出到标准输出流的文本正确显示,我们使用了`std::wcout`流。
希望这可以帮助到你!
c++ string转wstring
### 回答1:
可以使用 C++ 标准库中的 `std::wstring_convert` 类来实现字符串类型的转换。下面是一个示例代码:
```
#include <locale>
#include <codecvt>
#include <string>
std::wstring string_to_wstring(const std::string& str) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.from_bytes(str);
}
```
其中,`std::codecvt_utf8<wchar_t>` 是一个字符编码转换器,用于将 UTF-8 编码的字符串转换成宽字符(wchar_t)编码的字符串。`std::wstring_convert` 类则是一个字符串编码转换器,它可以将一个编码的字符串转换成另一种编码的字符串。
使用时,只需要调用 `string_to_wstring` 函数并传入需要转换的字符串即可。例如:
```
std::string str = "Hello, world!";
std::wstring wstr = string_to_wstring(str);
```
这样就可以将一个普通字符串转换成宽字符编码的字符串了。
### 回答2:
C++中可以通过以下几种方法将C string转换为wstring。
方法一:使用头文件<locale>
```
#include <locale>
#include <codecvt>
std::wstring strtowstr(const char* cstr)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.from_bytes(cstr);
}
```
该方法使用了std::wstring_convert和std::codecvt_utf8<wchar_t>来进行转换。首先创建一个std::wstring_convert对象,设置使用std::codecvt_utf8<wchar_t>编码转换器,然后使用from_bytes函数将C string转换成wstring。
方法二:使用头文件<Windows.h>
```
#include <Windows.h>
std::wstring strtowstr(const char* cstr)
{
int size = MultiByteToWideChar(CP_ACP, 0, cstr, -1, NULL, 0);
std::wstring wstr(size, 0);
MultiByteToWideChar(CP_ACP, 0, cstr, -1, &wstr[0], size);
return wstr;
}
```
该方法使用了Windows API函数MultiByteToWideChar进行转换。首先调用MultiByteToWideChar函数计算需要的宽字符缓冲区大小,然后创建一个wstring对象,并再次调用MultiByteToWideChar将C string转换成wstring。
以上两种方法都可以将C string转换成wstring,选择使用哪种方法可以根据具体需求来决定。需要注意的是,方法一需要包含头文件<locale>和<codecvt>,方法二则需要包含<Windows.h>头文件。
### 回答3:
将C++字符串(string)转换为宽字符字符串(wstring),可以使用C++标准库中的wstring_convert类。
首先,需要包含头文件<locale>和<string>,并使用std命名空间。
然后,声明一个std::wstring_convert对象,并指定其类型为wide字节(string)到多字节(string)的转换。
接下来,创建一个std::wstring对象,并将要转换的字符串作为参数传递给std::wstring_convert的from_bytes()方法。
最后,通过访问std::wstring对象来获取转换后的宽字符串(wstring)。
下面是一个示例代码:
#include <locale>
#include <string>
int main() {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wstr = converter.from_bytes("Hello, 世界!");
// 输出转换后的宽字符串
std::wcout << wstr << std::endl;
return 0;
}
在这个示例中,我们使用了std::codecvt_utf8_utf16<wchar_t>,它是一个converter的模板类型,用于将UTF-8编码的字符串转换为UTF-16编码的宽字符串。通过std::wstring_convert对象的from_bytes()方法,将输入的字符串"Hello, 世界!"转换为相应的宽字符串(wstring)。
最后,通过使用std::wcout打印输出转换后的宽字符串。
需要注意的是,转换过程中需要考虑字符集的编码,确保转换后的宽字符串能正确表示原始字符串中的字符。
阅读全文