1. ASC编码转Unicode编码
void ConvertMultiToWide(LPCSTR lpstr, int size, CStringW& csWide) { //计算字符长度 int nCount = MultiByteToWideChar(CP_ACP, 0, lpstr, size, NULL, 0); //分配内存 wchar_t* sConver = new wchar_t[nCount + 1]; SecureZeroMemory(sConver, _countof(sConver)); //转换 MultiByteToWideChar(CP_ACP, 0, lpstr, size, sConver, nCount); csWide.Empty(); csWide.Format(_T("%s"), sConver); delete[] sConver; }
或
void ConvertMultiToWide(LPCSTR lpstr, CStringW& csWide) { CStringA csMulti(lpstr); csWide.Empty(); int iStrLen = MultiByteToWideChar(CP_ACP, 0, csMulti.GetBuffer(), csMulti.GetLength(), NULL, 0); MultiByteToWideChar(CP_ACP, 0, csMulti.GetBuffer(), csMulti.GetLength(), csWide.GetBuffer(iStrLen), iStrLen); csMulti.ReleaseBuffer(); csWide.ReleaseBuffer(iStrLen); }
2. Unicode编码转ASC编码
void ConvertWideToMulti(LPCWSTR lpwstr, CStringA& csMulti) { CStringW csWide(lpwstr); csMulti.Empty(); int iStrLen = WideCharToMultiByte(CP_UTF8, 0, csWide.GetBuffer(), csWide.GetLength(), NULL, 0, NULL, NULL); WideCharToMultiByte(CP_UTF8, 0, csWide.GetBuffer(),csWide.GetLength(), csMulti.GetBuffer(iStrLen), iStrLen, NULL, NULL); csWide.ReleaseBuffer(); csMulti.ReleaseBuffer(iStrLen); }