char* 转成 std::wstring
时间: 2023-06-25 22:07:45 浏览: 81
你可以使用以下代码将 `char*` 转换为 `std::wstring`:
```cpp
#include <locale>
#include <codecvt>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wide_str = converter.from_bytes(char_str);
```
其中,`char_str` 是要转换的 `char*` 字符串。
解释一下上面的代码:
1. `std::codecvt_utf8<wchar_t>` 是一个将 UTF-8 编码的字符串转换成宽字符字符串的转换器。
2. `std::wstring_convert` 是一个用于字符串转换的实用工具类。它接受一个转换器作为模板参数,并提供了方便的接口进行字符串转换。
上述代码中,我们创建了一个 `std::wstring_convert` 对象,并将 UTF-8 转换器作为模板参数传递给它。然后,我们使用 `from_bytes` 函数将 `char*` 字符串转换为 `std::wstring` 宽字符字符串。
相关问题
不能将参数 1 从“char *”转换为“std::wstring”
这个错误提示通常出现在试图将一个 `char*` 类型的字符串直接赋值给 `std::wstring` 类型的字符串时。因为这两种类型的字符串是不同的,需要进行类型转换。
可以使用 `MultiByteToWideChar` 函数将 `char*` 类型的字符串转换为 `std::wstring` 类型的字符串,示例如下:
```
char* str = "Hello, world!"; // 假设 str 中存储的是 ANSI 编码的字符串
int len = strlen(str);
int wcsLen = MultiByteToWideChar(CP_ACP, 0, str, len, NULL, 0);
std::wstring wstr(wcsLen, L'\0');
MultiByteToWideChar(CP_ACP, 0, str, len, &wstr[0], wcsLen);
```
如果 `char*` 类型的字符串中存储的是 UTF-8 编码的字符串,则需要将 `CP_ACP` 参数改成 `CP_UTF8`。
需要注意的是,如果程序中需要反复进行字符串类型转换,可以考虑引入一些字符串转换的工具类,避免代码重复。
char转std::wstring
可以使用下面的代码将char类型的字符串转换为std::wstring类型:
```cpp
#include <locale>
#include <codecvt>
std::wstring str2wstr(const char* str)
{
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return converter.from_bytes(str);
}
```
该代码使用了std::codecvt_utf8_utf16类来完成UTF-8和UTF-16之间的转换。在调用该函数之前,需要确保已经包含了<locale>和<codecvt>头文件。
阅读全文