c++ string转wstring
时间: 2023-09-16 11:06:37 浏览: 116
深入理解c++中char*与wchar_t*与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打印输出转换后的宽字符串。
需要注意的是,转换过程中需要考虑字符集的编码,确保转换后的宽字符串能正确表示原始字符串中的字符。
阅读全文