例子
cpp
//多字节
char* szTest = "abc多字节";
int nLen = strlen(szTest);//9
//宽字节
wchar_t* szTest2 = L"abc多字节";
int nlen2 = wcslen(szTest2);//6
//测试项目配置为Unicode
wchar_t* szTesz3 = TEXT("abcd");
//char* -> CString
CString strTest(szTest);
//CString->char*
CStringA strTmp;
strTmp = strTest;
char* szTest4 = strTmp.GetBuffer();
TEXT
根据项目属性自动配置
宽字节
加上L
CString 转换
cpp
CString str;
str.Format(TEXT("nChar=%d nRepCnt=%d,nFlags=%d"),nChar,nRepCnt,nFlags);
CString 获取char*
cpp
//char* -> CString
CString strTest(szTest);
//CString->char*
CStringA strTmp;
strTmp = strTest;
char* szTest4 = strTmp.GetBuffer();
UNICODE
两个字节表示一个字符,比如'A'在ASCII下是一个字符,在UNICODE下是两个,高字符用0填充,汉字在ASCII下是两个字节,在UNICODE下仍旧是2个字节
UNICODE的用处就是表示世界上各种文字
MBCS 多字符集
他是不定长表示世界文字的编码
项目配置
如果是多字符集,则LPSTR就是char*
如果是UNICODE,则对应的是LPWSTR就是unsiged short*
LPSTR ,LPCSTR,LPTSTR,LPCTSTR
LPSTR :32位指针,指向一个字符串,每个字符占用一个字节
LPCSTR:32-bit指针,指向一个常字符串
LPTSTR :32位指针 指向一个字符串 每个字符串可能占用1字节或者2字节,取决于UNICODE是否定义
LPCTSTR:32位指针 指向一个常字符串 每个字符串可能占用1字节或者2字节,取决于UNICODE是否定义
LPTSTR 可以和 CString 互转
cpp
LPTSTR szTest5=szTest2;
CString strsss = szTest5;
例子
cpp
//根据项目配置Unicode
wchar_t* szTesz3 = TEXT("abcd");
LPTSTR szTest5=szTesz3;
LPCTSTR szTest6=TEXT("qaz");
LPSTR szTest7="123";
宏_T
当配UNICODE时候 _T就是L
没有的时候就是ANSI
cpp
LPTSTR szTest8=new TCHAR[32];
TCHAR* szTest8 = _T("HELLO");
T理解(TCHAR,LPTSTR,LPCTSTR,_T(),_TEXT()._tcsxx()...) 表示一种中间类型,即不表示多字节还是UNICODE,编译时候才决定
_tcs函数
_tcslen
_tcscpy
_tcscat
_tcscmp
例子
cpp
LPTSTR szTest5=szTest2;
LPCTSTR szTest6=TEXT("qaz");
LPSTR szTest7="123";
LPTSTR szTest8=new TCHAR[32];
TCHAR* szTest9 = _T("HELLO多字节");
_tcscpy(szTest8,szTest9);
int nLen3 = _tcslen(szTest9);
CString str12;
str12.Format(TEXT("nLen3=%d %d %s"),nLen3,_tcscmp(szTest8,szTest9),szTest8);
MessageBox(str12);