C++ 与String与WString相互转换
#include <wchar.h> #include <windows.h> /** @fn std::wstring String2WString(const std::string& str_in) * @brief string转换为wstring * @param (IN) const std::string& * @return std::wstring */ std::wstring String2WString(const std::string& str_in) { if (str_in.empty()) { std::cout << "str_in is empty" << std::endl; return L""; } // 获取待转换的数据的长度 int len_in = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str_in.c_str(), -1, NULL, 0); if (len_in <= 0) { std::cout << "The result of WideCharToMultiByte is Invalid!" << std::endl; return L""; } // 为输出数据申请空间 std::wstring wstr_out; wstr_out.resize(len_in - 1, L'\0'); // 数据格式转换 int to_result = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str_in.c_str(), -1, (LPWSTR)wstr_out.c_str(), len_in); // 判断转换结果 if (0 == to_result) { std::cout << "Can't transfer String to WString" << std::endl; } return wstr_out; } /** @fn std::string WString2String(const std::wstring& str_in) * @brief wstring转换为string * @param (IN) const std::wstring& * @return std::string */ std::string WString2String(const std::wstring& str_in) { if (str_in.empty()) { std::cout << "str_in is empty" << std::endl; return ""; } // 获取待转换的数据的长度 int len_in = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)str_in.c_str(), -1, NULL, 0, NULL, NULL); if (len_in <= 0) { std::cout << "The result of WideCharToMultiByte is Invalid!" << std::endl; return ""; } // 为输出数据申请空间 std::string wstr_out; wstr_out.resize(len_in - 1, '\0'); // 数据格式转换 int to_result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)str_in.c_str(), -1, (LPSTR)wstr_out.c_str(), len_in, NULL, NULL); // 判断转换结果 if (0 == to_result) { std::cout << "Can't transfer WString to String" << std::endl; return ""; } return wstr_out; }
转自C++ 与String与WString相互转换_MaxMaxXiong的博客-CSDN博客_c++ string 转wstring