C++string转换为wstring
时间: 2023-11-10 16:58:54 浏览: 88
可以使用`std::wstring_convert`和`std::codecvt_utf8<wchar_t>`来将C字符串转换为`std::wstring`。
示例代码:
```cpp
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
int main() {
const char* c_str = "Hello, world!"; // C字符串
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; // 转换器
std::wstring w_str = converter.from_bytes(c_str); // 转换为wstring
std::wcout << w_str << std::endl; // 输出转换后的wstring
return 0;
}
```
输出:
```
Hello, world!
```
在转换之前,需要创建一个`std::wstring_convert<std::codecvt_utf8<wchar_t>>`对象作为转换器。然后,使用`from_bytes`函数将C字符串转换为`std::wstring`。
相关问题
C++ stringstream转wstring
在C++中,`stringstream`通常用于处理文本流操作,它是一个非常实用的工具,主要用于字符串和流之间的转换。如果你想要将`stringstream`的内容转换成宽字符字符串(`wstring`),可以借助`std::wstring_convert`配合`std::codecvt_utf8<wchar_t>`来进行转换。
首先,你需要包含必要的头文件:
```cpp
#include <sstream>
#include <locale>
#include <codecvt> // For std::codecvt_utf8<wchar_t>
```
然后,你可以这样做:
```cpp
std::string str = "Hello, World!";
std::istringstream iss(str);
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
// 使用wstr()函数从stringstream转换到wstring
std::wstring wstr = converter.to_wstring(iss);
```
在这里,`converter`是一个用于编码转换的对象,`to_wstring()`函数实际完成了从UTF-8编码到宽字符(如UTF-16)的转换。
C++string与wstring类型转换
C++中,string与wstring类型转换一般有以下几种方法:
方法一:使用标准库std::wstring_convert和std::codecvt_utf8_utf16(或std::codecvt_utf8<wchar_t>)进行转换。这个方法在C++11和C++14标准下是可用的,但在C++17标准下已经被弃用。示例代码如下:
```cpp
#include <string>
#include <locale>
#include <codecvt>
// convert string to wstring
std::wstring to_wide_string(const std::string& input) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.from_bytes(input);
}
// convert wstring to string
std::string to_byte_string(const std::wstring& input) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.to_bytes(input);
}
```
这种方法适用于C++11和C++14标准,但不适用于C++17标准。
方法二:使用内联函数和std::wstring_convert进行转换。这个方法也使用了std::codecvt_utf8<wchar_t>进行编码转换。示例代码如下:
```cpp
#include <string>
#include <locale>
#include <codecvt>
// convert string to wstring
inline std::wstring to_wide_string(const std::string& input) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.from_bytes(input);
}
// convert wstring to string
inline std::string to_byte_string(const std::wstring& input) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.to_bytes(input);
}
```
这种方法与方法一类似,只是使用了内联函数来进行转换。
方法三:使用Windows系统特有的宽字符串定义L"wstring"来进行转换。这个方法适用于Windows系统,在C开发中经常用到。示例代码如下:
```cpp
#include <string>
#include <windows.h>
// convert string to wstring
std::wstring to_wide_string(const std::string& input) {
int size = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1, nullptr, 0);
std::wstring output(size, L'\0');
MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1, &output<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [C++string与wstring类型转换](https://blog.csdn.net/qq_30386941/article/details/126814596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [C++11:string和wstring之间互转换](https://blog.csdn.net/qq_43331089/article/details/123438581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文