C++string转换为wstring
时间: 2023-11-10 07:58:54 浏览: 37
可以使用`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++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 ]
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`流。
希望这可以帮助到你!