本文主要是介绍string <=> wstring,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- string <=> wstring
- 概述
- 笔记
- END
string <=> wstring
概述
string 和 wstring的互转分为2种情况:
- 当作\0结尾的可见字符串来转换 (可以自己封装A2W/W2A)
- 当作不可见的数据buffer来转换(可以自己封装MultiByteToWideChar/WideCharToMultiByte)
当一段数据中包含’\0’时:
- 如果用(A2W/W2A), 在转换结束时,会损失数据。
- 如果用(MultiByteToWideChar/WideCharToMultiByte), 在转换结束时,不会损失数据。
笔记
std::string CMyStringOpt::my_W2A(std::wstring strW)
{USES_CONVERSION;std::string str_rc = W2A(strW.c_str());return str_rc;
}std::wstring CMyStringOpt::my_A2W(std::string str)
{USES_CONVERSION;std::wstring str_rc = A2W(str.c_str());return str_rc;
}//将string转换成wstring
std::wstring CMyStringOpt::string2wstring(std::string str)
{std::wstring result;//获取缓冲区大小,并申请空间,缓冲区大小按字符计算 int len = MultiByteToWideChar(CP_ACP, 0, str.data(), (int)str.size(), NULL, 0);TCHAR* buffer = new TCHAR[len + 1];//多字节编码转换成宽字节编码 int len1 = MultiByteToWideChar(CP_ACP, 0, str.data(), (int)str.size(), buffer, len);buffer[len] = '\0'; //添加字符串结尾 //删除缓冲区并返回值 result.append(buffer, len); //! 如果用result.append(buffer), 会损失数据delete[] buffer;return result;
}//将wstring转换成string
std::string CMyStringOpt::wstring2string(std::wstring wstr)
{std::string result;//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = WideCharToMultiByte(CP_ACP, 0, wstr.data(), (int)wstr.size(), NULL, 0, NULL, NULL);char* buffer = new char[len + 1];//宽字节编码转换成多字节编码 int len1 = WideCharToMultiByte(CP_ACP, 0, wstr.data(), (int)wstr.size(), buffer, len, NULL, NULL);buffer[len] = '\0';//删除缓冲区并返回值 result.append(buffer, len); //! 如果用result.append(buffer), 会损失数据delete[] buffer;return result;
}
END
这篇关于string <=> wstring的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!