Unicode

        Unicode的全部字符都佔用兩個字節。

1.C運行庫對Unicode的支持

      在string.h中定義了一個wchar_t類型代替char類型來支持Unicode字符串:

        typedef unsigned short wchar_t;

      在string.h中定義了一些以wcs開頭的函數來支持Unicode,下面前面爲ANSI C字符串函數,後面爲Unicode函數:

char *strcat(char *,const char *);
wchar_t *wcscat(wchar_t *,const wchar_t *);

char *strchar(char *,const char *);
wchar_t *wcschr(wchar_t *,const wchar_t *);

char *strcmp(char *,const char *);
wchar_t *wcscmp(wchar_t *,const wchar_t *);

char *strlen(char *,const char *);
wchar_t *wcslen(wchar_t *,const wchar_t *);

        可以運用頭文件TChar.h建立單個源代碼文件,使用特定的宏,通過判斷是否定義了_UNICODE,來將這些宏擴展爲ANSI版本的函數或UNICODE版本的函數。如果需要定義一個字符,使用TCHAR類型。如果定義了_UNICODE,那麼THCAR聲明爲如下形式:

         typedef wchar_t TCHAR;

如果沒有定義_UNICODE,那麼TCHAR會聲明爲如下形式:

        typedef char TCHAR;

定義字符數組如下:

        TCHAR  szString[100];

 如果需要將字符串字面值定義爲UNICODE,那麼可以在字符串前加上大寫字母L,例如:

        TCHAR *pt=L"mystring";

但是有時候,我們希望系統能夠通過是否定義_UNICODE來智能的將字符串翻譯爲ANSI或UNICODE類型,那麼可以使用宏_TEXT。如果定義了_UNICODE,那麼宏定義形式如下:

         #define _TEXT(x) L ## x

如果沒有定義_UNICODE,那麼宏_TEXT定義如下形式:

        #define  _TEXT(x) x

因此,上面可改爲:

        TCHAR *pt=_TEXT("mystring");

2.windows定義的UNICODE數據類型

        在windows中定義的UNICODE數據類型如下:

數據類型

說明

WCHAR

用於定義UNICODE字符

PWSTR

指向UNICODE字符串的指針

PCWST

指向一個恆定的UNICODE字符串的指針

       windows頭文件中也定義了ANSI/UNICODE通用的數據類型PTSTR和PCTSTR,通過判斷是否定義了UNICODE宏,來指定PTSTR和PCTSTR的字符集類型。注意這裏UNICODE宏沒有下劃線。_UNICODE宏用於C運行期頭文件,UNICODE宏用於windows頭文件。

3.windows中的ANSI函數和UNICODE函數

        windows中的函數一般都有ANSI版本的函數和UNICODE版本的函數。ANSI版本版本的函數後面以A字母結束,如CreateWindowExA;UNICODE版本的函數以W結束,如CreateWindowExW。

        在windows中提供了一些字符串操作系統函數,如StrCat、StrChr、StrCmp、StrCpy等,這些函數都有ANSI和UNICODE版本的函數,如StrCatA何StrCatW,可以通過判斷是否使用了UNICODE宏來具體這些函數。要使用這些函數,要包含頭文件ShlWApi.h。

 4.windows字符串函數

函數 說明
CharLower 轉換成大寫字符串
CharUpper

轉換成小寫字符串

CharLowerBuff 轉換成大寫字符串
CharUpperBuff 轉換成小寫字符串
IsCharAlpha 判斷是否是字母
IsCharAlphaNumeric 判斷是否是字母和數字
IsCharLower 判斷是否死小寫字母
IsCharUpper 判斷是否是大寫字母
MutilByteToWideChar 將多字節字符串轉換成寬字符串
WideCharToMutilByte 將寬字符串轉換成多字節字符串
上面這些函數支持對UNICODE字符的操作。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章