Maxbad`Blog

std::string 转 std::wstring

2020-10-11 · 1 min read

inline std::wstring StringToWString(const std::string& str)
{
	int len = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
	if (0 == len) return L"";
	std::wstring buff(len, 0);
	if (::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, (LPWSTR)buff.data(), len) == 0) return L"";
	if (buff[buff.size() - 1] == '\0')
		buff.erase(buff.begin() + (buff.size() - 1));
	return buff;
}

inline std::string WStringToString(const std::wstring& str)
{
	int nNeedSize = WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL);
	if (0 == nNeedSize) return "";
	std::string buff(nNeedSize, 0);
	if (WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, (LPSTR)buff.data(), nNeedSize, NULL, NULL) == 0) return "";
	if (buff[buff.size() - 1] == '\0')
		buff.erase(buff.begin() + (buff.size() - 1));
	return buff;
}

任意类型转 std::wstring

template<class T>
inline std::wstring ToWString(const T& arg) 
{
    std::wstringstream temp;
    temp << arg;
    return temp.str();
}