学习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;

 

 

 

⎛⎝⊙⏝⏝⊙。⎠⎞⎛⎝⓿⏝⏝⓿。⎠⎞

posted @ 2020-03-21 00:36  惊惊  阅读(380)  评论(0编辑  收藏  举报