c++实现 wstring 到string的互相转换
时间: 2023-10-06 22:09:28 浏览: 228
可以使用以下代码实现wstring到string的互相转换:
```cpp
#include <locale>
#include <codecvt>
#include <string>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
// wstring to string
std::string wstringToString(const std::wstring& wstr)
{
return converter.to_bytes(wstr);
}
// string to wstring
std::wstring stringToWstring(const std::string& str)
{
return converter.from_bytes(str);
}
```
使用方法:
```cpp
std::wstring wstr = L"你好,世界!";
std::string str = wstringToString(wstr);
std::wstring convertedWstr = stringToWstring(str);
```
相关问题
string转WString
在C++开发中,有时需要将string类型转换为wstring类型,可以使用以下方法:
1.使用Windows API函数MultiByteToWideChar()和WideCharToMultiByte()进行转换,但这种方法只适用于Windows系统。
2.使用C++11/C++14标准中的std::wstring_convert和std::codecvt_utf8<wchar_t>进行转换,这种方法可以实现跨平台string与wstring互相转换,但是在C++17标准中已经被弃用。
以下是使用std::wstring_convert和std::codecvt_utf8<wchar_t>进行转换的示例代码:
#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);
}
以上代码中,to_wide_string()函数将string类型的input参数转换为wstring类型并返回,to_byte_string()函数将wstring类型的input参数转换为string类型并返回。
std::string 与 std::wstring 互转实现
在 C++ 中,你可以使用 `std::wstring_convert` 或者 `std::wstringstream` 来实现 `std::string` 和 `std::wstring` 之间的互相转换。以下是两种方法的示例代码:
**方法一:使用 std::wstring_convert**
```cpp
#include <iostream>
#include <locale>
#include <codecvt>
std::wstring StringToWString(const std::string& str) {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return converter.from_bytes(str);
}
std::string WStringToString(const std::wstring& wstr) {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return converter.to_bytes(wstr);
}
int main() {
std::string utf8Str = "Hello, 世界!";
std::wstring wideStr = StringToWString(utf8Str);
std::cout << "Wide string: " << wideStr << std::endl;
std::wstring wideStr2 = L"你好,世界!";
std::string utf8Str2 = WStringToString(wideStr2);
std::cout << "UTF-8 string: " << utf8Str2 << std::endl;
return 0;
}
```
**方法二:使用 std::wstringstream**
```cpp
#include <iostream>
#include <sstream>
std::wstring StringToWString(const std::string& str) {
std::wstringstream wss;
wss << str.c_str();
return wss.str();
}
std::string WStringToString(const std::wstring& wstr) {
std::stringstream ss;
ss << wstr.c_str();
return ss.str();
}
int main() {
std::string utf8Str = "Hello, 世界!";
std::wstring wideStr = StringToWString(utf8Str);
std::cout << "Wide string: " << wideStr << std::endl;
std::wstring wideStr2 = L"你好,世界!";
std::string utf8Str2 = WStringToString(wideStr2);
std::cout << "UTF-8 string: " << utf8Str2 << std::endl;
return 0;
}
```
无论使用哪种方法,`StringToWString` 函数将 `std::string` 转换为 `std::wstring`,`WStringToString` 函数将 `std::wstring` 转换为 `std::string`。你可以根据需要选择适合的方法进行转换。
请注意,在使用 `std::wstring` 和 `std::string` 进行转换时,确保你的编译环境支持 Unicode 字符集,并且设置了正确的字符集编码。
阅读全文