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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章