wchar_t*和string实现自动转换 C++97
时间: 2023-09-03 11:13:15 浏览: 176
在 C++98/03 标准中,可以使用以下函数将 string 转换为 wchar_t*:
```c++
#include <locale>
#include <string>
std::wstring widen(const std::string& str) {
std::wstring wide_str(str.length(), L' '); // 创建一个宽字符串,长度为 str 的长度
std::locale loc(""); // 获取本地化信息
std::use_facet<std::ctype<wchar_t> >(loc).widen(str.data(), str.data() + str.length(), &wide_str[0]); // 转换 string 为宽字符串
return wide_str;
}
```
然后,可以使用以下函数将 wchar_t* 转换为 string:
```c++
#include <locale>
#include <string>
std::string narrow(const wchar_t* str) {
std::string narrow_str;
std::locale loc("");
for (; *str != L'\0'; ++str) {
narrow_str += std::use_facet<std::ctype<wchar_t> >(loc).narrow(*str, '?'); // 转换宽字符为多字节字符
}
return narrow_str;
}
```
示例代码如下:
```c++
#include <iostream>
#include <locale>
#include <string>
// 将 string 转换为 wchar_t*
std::wstring widen(const std::string& str) {
std::wstring wide_str(str.length(), L' '); // 创建一个宽字符串,长度为 str 的长度
std::locale loc(""); // 获取本地化信息
std::use_facet<std::ctype<wchar_t> >(loc).widen(str.data(), str.data() + str.length(), &wide_str[0]); // 转换 string 为宽字符串
return wide_str;
}
// 将 wchar_t* 转换为 string
std::string narrow(const wchar_t* str) {
std::string narrow_str;
std::locale loc("");
for (; *str != L'\0'; ++str) {
narrow_str += std::use_facet<std::ctype<wchar_t> >(loc).narrow(*str, '?'); // 转换宽字符为多字节字符
}
return narrow_str;
}
int main() {
std::string str = "Hello, world!";
std::wstring wide_str = widen(str);
const wchar_t* wide_cstr = wide_str.c_str();
std::cout << "wide_cstr: " << wide_cstr << std::endl;
std::string narrow_str = narrow(wide_cstr);
std::cout << "narrow_str: " << narrow_str << std::endl;
return 0;
}
```
阅读全文