C++中的Wstring和string的转换

| 2007年5月3日星期四

//Converting a WChar string to a Ansi stringstring WChar2Ansi(LPCWSTR pwszSrc){ int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
if (nLen<= 0) return string("");
char* pszDst = new char[nLen];
if (NULL == pszDst) return string("");
WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL); pszDst[nLen -1] = 0;
string strTemp(pszDst); delete [] pszDst;
return strTemp;}
string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
//Converting a Ansi string to WChar stringwstring 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;}
wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}

0 评论:

发表评论