ASCII与Unicode的相互转换

wstring AsciiToUnicode(const string& str)

{

int unicodeLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0);

wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);

MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pUnicode, unicodeLen);

wstring ret_str = pUnicode;

free(pUnicode);

return ret_str;

}

string UnicodeToAscii(const wstring& wstr)

{

int ansiiLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);

char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);

WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);

string ret_str = pAssii;

free(pAssii);

return ret_str;

}

 

wstring Utf8ToUnicode(const string& str)

{

int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);

wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);

MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);

wstring ret_str = pUnicode;

free(pUnicode);

return ret_str;

}

 

string UnicodeToUtf8(const wstring& wstr)

{

int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);

char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);

WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);

string ret_str = pAssii;

free(pAssii);

return ret_str;

}

 

你可能感兴趣的:(c/c++)