欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Windows核心编程 第2章读书笔记

Windows核心编程 第2章读书笔记

接着上一篇写,都是手打的,所以估计有错别字啊
第一篇地址:
http://bbs.pediy.com/showthread.php?...=1#post1064353
二.字符和字符串处理
     1.UTF全称Unicode Transformation Format,UTF-16每个字符编码为2字节16位;
     2.在Windows程序中使用UTF-16能改进性能和减少内存消耗;
     自Windows NT起,Windows的所有版本都完全用Unicode来构建,调用Windows函数 时,如果传入一个ANSI字符,那么函数首先把字符串转换为Unicode,再把结果传给操作系统,
如果希望函数返回ANSI字符串,那么操作系统会先把Unicode转换为ANSI字符串,再把结果返回给应用程序;
     3.Microsoft的C/C++编译器定义了一个内建的数据类型wchar_t,表示16位的Unicode字符
      wchar_t  c=L'A';
      4.在Windows头文件WinNT.h中定义:
    typedef char CHAR;   //8-bit
      typedef CHAR *PCHAR;
      typedef CONST CHAR *PCSTR;
 -------------------------------------------------------------------------------------------------------
      typedef wchar_t WCHAR;    //16-bit
       typedef WCHAR *PWCHAR;
       typedef CONST WCHAR *PCWSTR;
   ------------------------------------------------------------------------------------------------------
   在API中经常遇到的参数类型:PCTSTR
      #ifdef UNICODE
      typedef LPCWSTR PCTSTR;
     #else
      typedef LPCSTR PCTSTR;
     #endif
     自己整理一下,果然清晰多了
     5.Windows函数的参数中有字符串,则该函数通常有两个版本,比如            CreateWindowsEx:
     在WinUser.h中,CreateWindowsEx实际上是一个宏
      #ifdef UNICODE
      typedef CreateWindowsEx CreateWindowsExW;
     #else
      typedef CreateWindowsEx CreateWindowsExA;
     #endif
     6.Microsoft开始倾向于某些函数只提供Unicode版本;
    7.C运行库中大多数字符串处理函数不检测长度参数,所以会发生缓冲区溢出;
    8.Windows中常见字符串函数
     int CompareString(
       LCID Locale,
        DWORD dwCmpFlags,
        LPCTSTR lpString1,
        int cchCount1,
        LPCTSTR lpString2,
        int cchCount2
        );
     LCID:locale ID,32位值,用来标识一种语言,这个函数以符号当地语言习惯的方式来比较,得到更有意义的结果
--------------------------------------------------------------
     int CompareStringOrdinal(
         LPCWSTR lpString1,
         int cchCount1,
        LPCWSTR lpString2,
        int cchCount2,
         BOOL bIgnoreCase
       );
     这个函数执行的是码位(code-point)比较,不考虑区域设置,所以速度很快,只支持Unicode字符串;
     9.TCHAR
     当没有定义_UNICODE宏时,TCHAR = char
     当定义了_UNICODE宏时,TCHAR = wchar_t 
     10.TEXT是在winnt.h中定义
     举例:TCHAR *ptch = TEXT("This is a const string.");   
     如果使用UNICODE字符集, 则TEXT("This is a const string.")相当于L"This is a      const string.",
      如果使用ASCII集, 则上述字符串相当于“This is a const string.”;
     11.Unicode与ANSI字符串转换
      int WideCharToMultiByte(
        UINT CodePage,
           DWORD dwFlags,
          LPCWSTR lpWideCharStr,
           int cchWideChar,
        LPSTR lpMultiByteStr,
          int cbMultiByte,
          LPCSTR lpDefaultChar,
        LPBOOL lpUsedDefaultChar
        );
-------------------------------------------------------------------------------------------------------
     int MultiByteToWideChar(
        UINT CodePage,
          DWORD dwFlags,
          LPCSTR lpMultiByteStr,
          int cbMultiByte,
       LPWSTR lpWideCharStr,
       int cchWideChar
       );
     12.判断文本是ANSI还是Unicode
     BOOL IsTextUnicode(
      const VOID *lpv,
        int iSize,
       LPINT lpiResult
      );
       此方法并不一定准确。

      写完了,轻松一下,明天把第三章看完,再写一篇,希望能坚持下去。。。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功