C++中将wstring转为string
今天在写代码的时候有个需求是要把wstring类型和string类型进行转换,然后去网上查了一下,很多博主说了自己的解决办法,总结起来这些办法有两个大类:
1、使用WindowsAPI,但是我觉得这样不是特别优雅(bushi)
2、使用C++11的标准,但是在C++17时,所用到的一些标准被荒废了,而且我在自己的VS2022上测试时,这个方法也行不通
后来又去搜了一下,终于找到了一个基于C++17的方法:
wstring to string 使用C++17的解决办法
string to wstring 使用C++17的解决办法
wstring to string 代码如下:
/* VS2022, C++20通过 */
#include <filesystem>
#include<string>
#include<locale>
int main()
{
setlocale(LC_ALL, "chs"); //识别中文
const std::wstring wPath = L"aa宽字符串aa";
const std::string path = std::filesystem::path(wPath).string();
std::cout<<path; //可以正确输出
return 0;
}
string to wstring 代码如下:
#include <filesystem>
#include<string>
#include<locale>
int main()
{
setlocale(LC_ALL, "chs"); //识别中文
std::string s="我εx";
auto w = std::filesystem::path(s).wstring();
std::wcout << w; //可以正确输出
return 0;
}
我测试了一些字符串,都能通过。
该代码投机取巧地借用了filesystem,把宽字符串当作文件路径来处理,达到了想要的效果,可以说是十分巧妙。
以此为记。