wstring转char
时间: 2023-09-03 16:13:17 浏览: 118
将 wstring 转换为 char* 的方法可以使用 WideCharToMultiByte 函数,示例代码如下:
```c++
#include <string>
#include <windows.h>
// wstring 转 char*
char* wstring_to_char(const std::wstring& wstr)
{
int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
char* buf = new char[len];
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, buf, len, NULL, NULL);
return buf;
}
```
注意:转换后的 char* 一定要记得释放,否则会出现内存泄漏问题。
相关问题
wstring转char *
可以使用如下方法将wstring转换为char *:
```c++
#include <iostream>
#include <string>
int main() {
std::wstring wstr = L"Hello, world!"; // 宽字符串
const wchar_t *wptr = wstr.c_str(); // 宽字符串指针
int len = WideCharToMultiByte(CP_UTF8, 0, wptr, -1, NULL, 0, NULL, NULL); // 获取转换后的长度
char *cptr = new char[len]; // 创建char *指针
WideCharToMultiByte(CP_UTF8, 0, wptr, -1, cptr, len, NULL, NULL); // 转换
std::cout << cptr << std::endl; // 输出转换后的字符串
delete[] cptr; // 释放指针
return 0;
}
```
上述代码中,我们首先将wstring转换为宽字符串指针,然后使用WideCharToMultiByte函数将宽字符串转换为char *指针。需要注意的是,转换后的字符串长度需要包括空字符,因此在获取长度时需要传入-1作为字符串长度。另外,在使用完char *指针后需要释放内存。
c++ wstring 转char *
下面是将C++ wstring转换为char*的示例代码:
```cpp
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
int main() {
std::wstring wstr = L"Hello, world!"; // 定义一个wstring
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv; // 定义一个wstring_convert对象
std::string str = conv.to_bytes(wstr); // 将wstring转换为string
const char* cstr = str.c_str(); // 将string转换为char*
std::cout << cstr << std::endl; // 输出结果:Hello, world!
return 0;
}
```
上述代码中,我们使用了`std::wstring_convert`类来进行转换。首先,我们定义了一个`std::wstring`对象`wstr`,并将其初始化为`L"Hello, world!"`。然后,我们定义了一个`std::wstring_convert`对象`conv`,并指定了其模板参数为`std::codecvt_utf8<wchar_t>`,这个模板参数表示我们要将`wchar_t`类型转换为`UTF-8`编码的`char`类型。接着,我们调用`conv.to_bytes`函数将`wstr`转换为`std::string`类型的`str`。最后,我们调用`str.c_str()`函数将`str`转换为`const char*`类型的`cstr`,并输出其值。
阅读全文