以前碰到这个问题整了很久,然后今天又碰到这个问题又整了很久,而且居然忘记了上次碰到过,诶看来是老了,所以还是做个笔记吧!
ASCII 字符(窄字符,8位):CHAR, char ,LPCSTR, LPSTR ,PCHAR, PCSTR ,PSTR ,std::string
Unicode 字符(宽字符,16位):LPCWSTR ,LPWSTR ,PCWSTR ,PTCHAR, PWCHAR, PWSTR, WCHAR ,CString
说说这些大写字母的含义,这样比较好记忆,
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
STR表示这个变量是一个字符串
最常用的转换 A 为窄字符 W 为宽字符:
A to W 的方式有:
W = _T(“A”) ;W = TEXT(“A”); W = L”A”;W = A2W(A);
W to A 的方式有:
A = W2A(W) ;A = W2BSTR(W) ;
此外:
wchar_t* CharToWchar(const char* c){ int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0); wchar_t* m_wchar=new wchar_t[len+1]; MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len); m_wchar[len]='\0'; return m_wchar; } wchar_t* StringToWchar(const std::string& s){ const char* p=s.c_str(); return CharToWchar(p); }
直接调用stringtowchar()函数就行了!
STL::string s1;LPCTSTR pS2 = s1.c_str();
Cstring->std::string;
方法一:CString重载过了const char *操作符,而std::string有const char *的构造函数。正好OK
CString cstr("sdfs");
std::string sss(cstr);
方法二:
CString str("hello");
string s;
s = str.GetBuffer(0);
或 s = string(str.GetBuffer(0));
//注意释放ReleaseBuffer
std::string->CString
方法一:
string s("hello");
CString str;
str = s.c_str();
或str = CString(s.c_str());