整合了一下别人的代码。
LPSTR - (long) pointer to string - char *
LPCSTR - (long) pointer to constant string - const char *
LPWSTR - (long) pointer to Unicode (wide) string - wchar_t *
LPCWSTR - (long) pointer to constant Unicode (wide) string - const wchar_t *
LPTSTR - (long) pointer to TCHAR (Unicode if UNICODE is defined, ANSI if not) string - TCHAR *
LPCTSTR - (long) pointer to constant TCHAR string - const TCHAR *
目录
(1)(CString转char*转const char*)
(2)(CString 转string转const char*)
1. TCHAR 转成 string
std::string TCHAR2STRING(TCHAR *STR){
int iLen = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, NULL);
char* chRtn = new char[iLen * sizeof(char)];
WideCharToMultiByte(CP_ACP, 0, STR, -1, chRtn, iLen, NULL, NULL);
std::string str(chRtn);
return str;
}
2. char* 转换成 LPCTSTR
char ch[1024] = "wo shi xiaoyu";
int num = MultiByteToWideChar(0,0,ch,-1,NULL,0);
wchar_t *wide = new wchar_t[num];
MultiByteToWideChar(0,0,ch,-1,wide,num);
3. LPCTSTR 转换成 char *
wchar_t widestr[1024] = L"wo shi fish";
int num = WideCharToMultiByte(CP_OEMCP,NULL,widestr,-1,NULL,0,NULL,FALSE);
char *pchar = new char[num];
WideCharToMultiByte (CP_OEMCP,NULL,widestr,-1,pchar,num,NULL,FALSE);
4. LPCTSTR转换成string
(1)方法1(适用于没有定义UNICODE)
配置属性 -> C/C++ -> 预处理器 -> 预处理器定义
看看有没有 UNICODE/_UNICODE 有的话就去掉。
std::string texts;
LPCTSTR lpTexts = _T("ABC");
texts = (LPSTR)lpTexts;
(2)适用于定义了UNICODE的工程
LPCTSTR lpszName = TEXT("Michael");
#ifdef UNICODE
wstring strName(lpszName);
#else
string strName(lpszName);
#endif // UNICODE
5. string转换成LPCWSTR
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}std::string s;
#ifdef UNICODE
std::wstring stemp = s2ws(s); // Temporary buffer is required
LPCWSTR result = stemp.c_str();
#else
LPCWSTR result = s.c_str();
#endifLPCTSTR
6. CString转string
(1)
CString str = _T("CSDN");
USES_CONVERSION;
std::string s(W2A(str));
(2)
CString str = _T("CSDN");
std::string s = (CT2A)str;
7. string转CString
CString str;
std::string s=“CSDN“;
str=s.c_str();
8. CString转const char*
(1)(CString转char*转const char*)
CString str=_T("CSDN");
const char* cstr;
char temp[100];
::wsprintfA(temp, "%ls",(LPCTSTR)str);
cstr = temp;
(2)(CString 转string转const char*)
CString str = _T("CSDN");
USES_CONVERSION;
std::string s(W2A(str));
const char* cstr = s.c_str();
9. const char*转CString
const char* cstr = "CSDN";
CString str(cstr);