学习vc++的第六天--微软的字符串定义
我把视频暂停到了 https://www.bilibili.com/video/av79302998?p=62
然后去看了关于字节处理的方式,因为我发现提取一个字符串出来要每次写#ifdef UNICODE挺麻烦的
于是乎我看了 https://www.bilibili.com/video/av38413272/?p=1 的所有字节处理
● 窄字节: char、char * 、const char * CHAR、(PCHAR、PSTR、LPSTR)、LPCSTR ● Unicode 宽字节: wchar_t、wchar_t * 、const wchar_t * WCHAR、(PWCHAR、PWSTR、LPWSTR)、LPCWSTR ● T 通用类型: TCHAR、(TCHAR * 、PTCHAR、PTSTR、LPTSTR)、LPCTSTR
LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。 P表示这是一个指针 C表示是一个常量 T表示在Win32环境中, 有一个_T宏 STR表示这个变量是一个字符串
记忆方法: L(长)P(指针)C(常量)T(通用)STR(字符串)
原来我们只需要用通用类型处理字符串就好了..也就是其实是微软一层一层的套娃(函数封装和宏都是套娃)...
所以复杂是复杂,了解了定义之后就感觉不复杂了...
毕竟宏和字符串是CPP入门劝退大王...
然后cpp的string类只是上面的窄宽字节的一层套娃,加了一点成员函数,
string和CString的差别在于,string自带的成员函数少,所以CString又套了一层娃...
但是为了完善开发者对于字符串的使用,很多程序,例如QT又有QString....
为什么cpp标准它不提供完美一点的string类....
凌乱.....
// 要包含
// #include "atlbase.h"
// #include "atlstr.h"
//老旧的 A2W,W2A,T2A,T2W
//使用ATL提供新的 CA2W,CW2A,CT2W,CT2A 来更方便的转换:
//cpp的人也太可爱了, 2的发音是To...但是又可以节约消耗
CA2W a2wobj(p_a); //窄转宽字节 p_www = (wchar_t*)a2wobj; CW2A w2aObj(p_www); //宽转窄字节 p_aaa = (char*)w2aObj; CT2A ct2Obj(p_www);//通用转窄字节 p_aaa = (char*)w2aObj; CString cs = _T("cabbagc"); cs.Trim(); cs.MakeUpper(); cs.MakeLower(); CString strRight = cs.Right(3);//末尾的字符 CString strSub = cs.SpanIncluding(_T("abc"));//逐字匹配,有就返回,没有就中断 CString strSub2 = cs.SpanExcluding(_T("vdrb"));//和上面相反,没有就返回,有就中断 CString strT; strT.Format(_T("hello %s%d##"), _T("你好"), 123); strT.Replace('l', '#'); strT.Replace(_T("##"), _T("aaa")); //默认支持 窄字节转宽字节Unicode,反向不提供方法 const char* ppp = "你好132"; CString strPPP = ppp;
⎛⎝⊙⏝⏝⊙。⎠⎞⎛⎝⓿⏝⏝⓿。⎠⎞