在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
几种C++ std::string和std::wstring相互转换的转换方法 第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考《windows核心编程》): #include <string> if (nLen<= 0) return std::string(""); char* pszDst = new char[nLen]; WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL); std::string strTemp(pszDst); return strTemp; string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); } //Converting a Ansi string to WChar string std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen) { WCHAR *pwszDst = new WCHAR[nSize+1]; MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize); if( pwszDst[0] == 0xFEFF) // skip Oxfeff wstring wcharString(pwszDst); return wcharString; std::wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());} 第二种方法:采用ATL封装_bstr_t的过渡:(注,_bstr_是Microsoft Specific的,所以下面代码可以在VS2005通过,无移植性); string ws2s(const wstring& ws); string ws2s(const wstring& ws) wstring s2ws(const string& s) 第三种方法:使用CRT库的mbstowcs()函数和wcstombs()函数,平台无关,需设定locale。 setlocale(LC_ALL, "chs"); const wchar_t* _Source = ws.c_str(); setlocale(LC_ALL, curLocale.c_str()); return result; wstring s2ws(const string& s) const char* _Source = s.c_str(); setlocale(LC_ALL, "C"); return result; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论