关于CString

来源:互联网 发布:网络语言2017流行语 编辑:程序博客网 时间:2024/03/28 17:34

 1. wchar_t

     类型:宽字符类型
     定义:typedef unsigned short wchar_t,16位
     应用:wchar_t *wchar = L"hello"

2.如果定义了_UNICODE

L:  #define __T(X) L##x  ,两个#称为粘贴符号。
TCHAR = wchar_t;
_T(x)=__T(x)=TEXT(x)=_TEXT(x)=L##x
如果没有定义:
TCHAR = char
_T(x)=__T(x)=TEXT(x)=_TEXT(x)=x

3. 明确定义8位字符变量和字符串,请使用:CHAR char PCHAR
       详细定义:
 1)6种8位字符串指针: (注:N和L表示near和long,指的是16位WINDOWS种两种大小不同的指标,在Win32中near和long指标没有区别)
   typedef CHAR *PCHAR, *LPCH, *PCH, *NPSTR, *LPSTR, *PSTR;
        2)4种const 8位字符串指针:
          typedef COSNT CHAR *LPCCH, *PCCH, *LPCSTR, *PCSTR;
   明确定义16位字符变量和字符串,请使用:WCHAR wchar_t PWCHAR L
       详细定义:
        1)6种16位字符串指针:
   typedef WCHAR *PWCHAR, *PWCH, *LPWCH, *NWPSTR, *LPWSTR, *PWSTR;
        2)4种const 16位字符串指针
   typedef CONST WCHAR *LPCWCH, *PCWCH, *LPCWSTR, *PCWSTR;
   如果对于8位还是16位取决于UNICODE标识符的定义字符变量和字符串,请使用:TCHAR PTCHAR _T(x) __T(x) TEXT(x) _TEXT(x)
       详细定义:
 1)6种字符串指针:
   typedef TCHAR *PTCHAR, *PTCH, *PTSTR, *LPTCHAR, *LPTSTR, *NTPSTR;
 2)4种字符串指针:
   typedef CONST TCHAR *PCTCH, *PCTSTR, *LPCTCH, *LPCTSTR;
 
4. (测试环境:VC++6.0) char类型            wchar_t类型
     类型大小(32位系统)  8位                 16位
     常量字符表示法       'A'                L'A'或'A'
     常量字符串表示法    'hello'             L'hello' 
     一些使用方法       char c='A';        wchar_t wc='A';
         (c的值:0x41)        (wc的值:0x0041)
                      char* p='hello';    wchar_t* pw=L"hello";
     sizeof          sizeof("hello")=6     sizeof(L"hello")=12
     计算长度        strlen("hello")=5     wcslen(L"hello)=5

5  使用函数区别:
        ANSI                UNICODE              均可
    printf              wprintf             _tprintf
 strlen              wcslen              _tcslen
        strcpy             wcscpy  _tcscpy(LPTSTR, LPCTSTR);  CString可以转化成LPCTSTR,该方法在CString中实现

6. CString类的方法:

   1) CString::Find
     int Find(TCHAR ch) const;
     int Find(LPTCHAR lptchar) const;
     int Find(TCHAR ch, int nStart) const;
     int Find(LPTCHAR lptchar, int nStart) const;

      返回值:
        返回此CString对象中与需要的子字符串或字符匹配的第一个字符的从零开始的索引;如果没有找到子字符串或字符则返回-1。

      参数:
        ch:       要搜索的单个字符。
        lptchar:  要搜索的子字符串。
        nStart:   字符串中开始搜索的字符的索引,如果是0,则是从头开始搜索。如果nStart不是0,则位于nStart处的字符不包括在搜索之内。
 
      说明:
        此成员函数用来在此字符串中搜索子字符串的第一个匹配的字符。函数的重载可以接收单个字符(类似于运行时函数strchr)和字符串(类似于strstr)。
   
   2) CString::CString
     CString();
     CString(const CString& str);
     CString(TCHAR ch, int nRepeat = 1);
     CString(LPCTSTR lpch, int nLength);
     CString(const unsigned char* psz);
     CString(LPCSTR lpcsz);
     CString(LPCWSTR lpwsz);

7.  UNICODE字符串转化成ANSIC字符串
   
    1) WideCharToMultiByte()方法
      int WideCharToMultiByte (
     UINT     CodePage,
     DWORD    dwFlags,
     LPCWSTR  lpWideCharStr,
        int      cchWideChar,
        LPSTR    lpMultiByteStr,
        int      cbMultiByte,
        LPCSTR   lpDefaultChar,
        LPBOOL   lpUsedDefaultChar );

      参数:
       CodePage:        Unicode字符转换成的代码页。你可以传递CP_ACP来使用当前的ANSI代码页。代码页是256个字符集。字符0——127与ANSI编码一样。字符128——255与                         ANSI字符不同,它可以包含图形字符或者读音符号。每一种语言或地区都有其自己的代码页,所以使用正确的代码页对于正确地显示重音字符很重要。
       dwFlags:         确定Windows如何处理“复合” Unicode字符,它是一种后面带读音符号的字符。如è就是一个复合字符。如果这些字符在CodePage参数指定代码页中,                          不会出什么事。否则,Windows必须对之进行转换。
                         传递WC_COMPOSITECHECK使得这个API检查非映射复合字符。
                         传递WC_SEPCHARS使得Windows将字符分为两段,即字符加读音,如e`。
                         传递WC_DISCARDNS使得Windows丢弃读音符号。
                         传递WC_DEFAULTCHAR使得Windows用lpDefaultChar参数中说明的缺省字符替代复合字符。
                         缺省行为是WC_SEPCHARS。
      lpWideCharStr:    要转换的Unicode串。
      cchWideChar:      lpWideCharStr在Unicode字符中的长度。通常传递-1,表示这个串是以0x00结尾。
      lpMultiByteStr:   接受转换的串的字符缓冲
      cbMultiByte:      lpMultiByteStr的字节大小。
      lpDefaultChar:    可选——当dwFlags包含WC_COMPOSITECHECK | WC_DEFAULTCHAR并且某个Unicode字符不能被映射到同等的ANSI串时所传递的一个单字符ANSI串,包含被                          插入的“缺省”字符。可以传递NULL,让API使用系统缺省字符(一种写法是一个问号)。
      lpUsedDefaultChar:可选——指向BOOL类型的一个指针,设置它来表示是否缺省字符曾被插入ANSI串。可以传递NULL来忽略这个参数。


 // 假设已经有了一个Unicode 串 wszSomeString...
 char szANSIString [MAX_PATH];

     WideCharToMultiByte ( CP_ACP,            // ANSI 代码页
                          WC_COMPOSITECHECK,     // 检查重音字符
                          wszSomeString,         // 原Unicode 串
                          -1,                    // -1 意思是串以0x00结尾
                          szANSIString,          // 目的char字符串
                          sizeof(szANSIString),  // 缓冲大小
                          NULL,                  // 肥缺省字符串
                          NULL );                // 忽略这个参数
 调用这个函数后,szANSIString将包含Unicode串的ANSI版本。

     2) 常量不能直接转化成变量,

 

 

 

 

原创粉丝点击