下文提供两个函数接口,分别实现unicode字符集下与多字节字符集下的CString转string
1、unicode字符集下CString转string
string CString2string(CString csStrData) { int iLen = csStrData.GetLength() + 1; char* pSrc = csStrData.GetBuffer(iLen * sizeof(char)); string strRet = string(pSrc); csStrData.ReleaseBuffer(iLen); return strRet; }
2、多字节字符集下的CString转string
string CString2string(CString csStrData) { int iLen = csStrData.GetLength() + 1; char* pSrc = new char[iLen]; if (pSrc == NULL) { return ""; } memset(pSrc, 0, iLen); wchar_t* pwSrc = NULL; pwSrc = csStrData.GetBuffer(iLen * sizeof(wchar_t)); WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pwSrc, -1, pSrc, iLen, NULL, NULL); string strRet = string(pSrc); delete [] pSrc; csStrData.ReleaseBuffer(iLen); return strRet; }
3、一个整合的方法,适用于WIN32和win64
string CString2string(CString csStrData) { string strRet ; char* pRet = NULL; int icsLen = csStrData.GetLength() + 1; #if (defined(_WIN64)) wchar_t* wptr = NULL; wptr = csStrData.GetBuffer(icsLen * sizeof(wchar_t)); int icLen = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wptr, icsLen, NULL, 0, NULL, NULL); do { pRet = new char[icLen]; if (NULL == pRet) { return ""; } WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wptr, icsLen, pRet, icLen, NULL, NULL); pRet[icLen] = '\0'; strRet = string(pRet); delete [] pRet; } while (0); csStrData.ReleaseBuffer(icsLen); #else pRet = csStrData.GetBuffer(icsLen * sizeof(char)); strRet = string(pRet); csStrData.ReleaseBuffer(icsLen); #endif return strRet; }
附一个string转wchar_t*
例如:
string str("你好中国"); wchar_t* wc = new wchar_t[str.size()]; swprintf(wc, 100, L"%S", str.c_str()); //注意大写 //wc指向的内存区域存储这wchar_t类型的 ”你好中国“。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214408.html原文链接:https://javaforall.net
