zoukankan      html  css  js  c++  java
  • LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR的来源及意义

        

    1. Unicode字符集:

      它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。

    2. MCBS字符集:

      即多字节字符集,它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但表示其他文字时就需要用多字节。

    3. Unicode宏:

      C++宏实现ANSI和Unicode的通用编程的本质是根据”_UNICODE”(注意,有下划线)定义与否,这些宏展开为ANSI或Unicode字符(字符串)。MBCS宏对应的字符串指针是char*也就是LPSTR,UNICODE对应的指针是unsigned short*也就是LPWSTR,为了写程序方便微软定义了类型LPTSTR,在MBCS下他就是char*, 在UNICODE下它是unsigned char*,这样你就可以重定义一个宏进行不同字符集的转换了。

    4. LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR的意义:

    LPSTR:32bit指针指向一个字符串,每个字符占1字节;

    LPCSTR:32bit指针指向一个常字符串,每个字符占1字节;

    LPWSTR:32bit指针指向一个字符串,每个字符占2字节;

    LPCWSTR:32bit指针指向一个常字符串,每个字符占2字节;

    LPTSTR:32bit指针指向一个字符串,每字符可能占1字节或2字节,取决于Unicode是否定义;

    LPCTSTR:32bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义;

    5. 表示方式

      (1)L表示字符串资源采用Unicode编码方式,示例如下:

        wchar_t Str[]=L"Hello World!"; //每个字符都用2个字节来存储

      (2)_T是一个适配的宏

        当#ifdef _UNICODE的时候_T就是L,没有#ifdef _UNICODE的时候,_T就是ANSI的。

        比如:

        LPTSTR lpStr = new TCHAR[32];

        TCHAR* szBuf = _T("Hello");

        以上两句使得无论是在UNICODE编译条件下都是正确编译的。

  • 相关阅读:
    e621. Activating a Keystroke When Any Child Component Has Focus
    e587. Filling Basic Shapes
    e591. Drawing Simple Text
    e595. Drawing an Image
    e586. Drawing Simple Shapes
    e636. Listening to All Key Events Before Delivery to Focused Component
    在 PL/SQL 块的哪部分可以对初始变量赋予新值? (选择1项)
    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
    你判断下面语句,有什么作用?(单选)
    Oracle数据库表空间与数据文件的关系描述正确的是( )
  • 原文地址:https://www.cnblogs.com/jmliao/p/6032050.html
Copyright © 2011-2022 走看看