zoukankan      html  css  js  c++  java
  • Windows编程系列:字符串

    ANSI字符和Unicode字符

    在Visual C++中,用CHAR来表示8位ANSI字符,用WCHAR来表示16位Unicode字符(宽字符)

    1 typedef char CHAR
    2 typedef wchar_t WCHAR

    一般常用的定义如下

    TypedefDefinition
    CHAR char
    PSTR or LPSTR char*
    PCSTR or LPCSTR const char*
    PWSTR or LPWSTR wchar_t*
    PCWSTR or LPCWSTR const wchar_t*


    声明ANSI字符和字符串的方法如下:

    1 char c = 'H';
    2 char szBuffer[100] = "Hello World";
    3 char *str = "Hello";

    声明Unicode字符和字符串的方法如下:

    1 wchar_t c = L'H';
    2 wchar_t szBuffer[100] = L"Hello World";
    3 wchar_t *str = L"Hello";

    Windows中的ANSI和Unicode函数

    在最初的Windows操作系统中,不支持Unicode字符,只有ANSI。

    当引入Unicode后,通过提供两组并行api来简化转换,一组用于ANSI字符串,另一组用于Unicode字符串。

    函数后面带A的使用ANSI字符,如

    1 BOOL CreateDirectoryA(
    2   LPCSTR                lpPathName,
    3   LPSECURITY_ATTRIBUTES lpSecurityAttributes
    4 );

    函数后面带W的使用Unicode字符,如

    1 BOOL CreateDirectoryW(
    2   LPCWSTR               lpPathName,
    3   LPSECURITY_ATTRIBUTES lpSecurityAttributes
    4 );

    在内部,ANSI版本的函数会将字符串转换成Unicode。

    Windows头文件还定义了一个宏,该宏在定义预处理器符号Unicode时解析为Unicode版本,否则解析为ANSI版本。

    1 #ifdef UNICODE
    2 #define CreateDirectory  CreateDirectoryW
    3 #else
    4 #define CreateDirectory  CreateDirectoryA
    5 #endif // !UNICODE

    推荐使用Unicode字符集,Unicode字符集支持的字符更多,就不用担心区域化时,字符显示乱码的问题。 在新版本的API函数中,也将会只有Unicode的版本,而没有ANSI版本。

    TCHAR和TEXT宏

    为了更方便的使用Unicode和ANSI字符,系统还定义了如下宏

    MacroUnicodeANSI
    TCHAR wchar_t char
    TEXT("x") L"x" "x"

     如

    1 SetWindowText(TEXT("My Application")); 

    会解析成

    1 SetWindowTextW(L"My Application"); // Unicode
    2 SetWindowTextA("My Application");  // ANSI 

    需要注意的是,有些头文件会使用预处理器符号UNICODE,而有些头文件使用_UNICODE,所以在Visual Studio 创建项目时,这两个符号都会被定义

    如果需要修改当前默认字符集,可以在属性页修改

    C运行库的中的Unicode函数和ANSI函数

    针对不同的字符版本,微软的C运行时库也定义了许多相似的宏,用于区分Unicode和ANSI,如

    1 #ifdef _UNICODE
    2 #define _tcslen     wcslen
    3 #else
    4 #define _tcslen     strlen
    5 #endif 
    1 #ifdef _UNICODE
    2 #define _tcscpy     wcscpy
    3 #else
    4 #define _tcscpy     strcpy
    5 #endif 

    ANSI字符与Unicode字符互相转换的方法

    https://www.cnblogs.com/zhaotianff/p/12733569.html

    life runs on code

    作者: zhaotianff

    转载请注明出处

  • 相关阅读:
    js过滤HTML标签以及 
    Sharepoint的web.config配置
    javascript 动态添加div等这样的标签包含一些元素
    SPMetal 日志导出Caml语句
    sitepage applicationPage 区别
    exchange部署的好处
    SPSiteDataQuery不完全使用手册
    WP7 开发(十二) WebBrowser控件
    WP7 开发(十一) Web Task
    WP7 开发(十四) ApplicationBar
  • 原文地址:https://www.cnblogs.com/zhaotianff/p/13849096.html
Copyright © 2011-2022 走看看