//将string转换成wstring wstring StringToWString(const string& str) { wstring result; //获取缓冲区大小,并申请空间,缓冲区大小按字符计算 int len = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0); TCHAR* buffer = new TCHAR[len + 1]; //多字节编码转换成宽字节编码 ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len); buffer[len] = '/0'; //添加字符串结尾 //删除缓冲区并返回值 result.append(buffer); delete[] buffer; return result; } //将wstring转换成string string WstringToString(const wstring& wstr) { string result; //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL); char* buffer = new char[len + 1]; //宽字节编码转换成多字节编码 ::WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL); buffer[len] = '/0'; //删除缓冲区并返回值 result.append(buffer); delete[] buffer; return result; } #include <string> #include <windows.h> using namespace std; //Converting a WChar string to a Ansi string std::string WChar2Ansi(LPCWSTR pwszSrc) ...{ int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL); if (nLen<= 0) return std::string(""); char* pszDst = new char[nLen]; if (NULL == pszDst) return std::string(""); WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL); pszDst[nLen -1] = 0; std::string strTemp(pszDst); delete [] pszDst; return strTemp; } 本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/ice197983/archive/2007/03/19/1533878.aspx std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen) ...{ int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0); if(nSize <= 0) return NULL; WCHAR *pwszDst = new WCHAR[nSize+1]; if( NULL == pwszDst) return NULL; MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize); pwszDst[nSize] = 0; if( pwszDst[0] == 0xFEFF) // skip Oxfeff for(int i = 0; i < nSize; i ++) pwszDst[i] = pwszDst[i+1]; wstring wcharString(pwszDst); delete pwszDst; return wcharString; } 本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/ice197983/archive/2007/03/19/1533878.aspx