《Windows核心程式設計》讀書筆記(三)

2021-03-31 08:56:32 字數 2070 閱讀 9800

unicode-寬位元組字符集是是為了解決軟體本地化(多語言版本化)而定製的一項技術標準。unicode字串中的所有字元都是16位的(兩個位元組),程式設計師只需要對指標進行遞增或者遞減,就可以遍歷字串中的各個字元,不在需要像單位元組字元一樣去判斷下一位元組是屬於同一字元的組成部分還是乙個新字元。

使用unicode,有幾個好處,可以很容易地在不同語言之間進行資料交換、使你能夠分配支援所有語言的單個二進位制.exe檔案或dll檔案、提高應用程式的執行效率。

各windows作業系統對unicode的支援:

windows 2000既支援unicode,也支援ansi,因此可以為任意一種開發應用程式。

windows 98只支援ansi,只能為ansi開發應用程式。

windows ce只支援unicode,只能為unicode開發應用程式。

因為***通常用於使不同的元件能夠互相進行通訊,而unicode則是傳遞字串的最佳手段。所以需要字串的所有***介面方法都只能接受unicode字串。

2.8 如何編寫unicode源**

c對unicode的支援

定義乙個名字為wchar_t的資料型別,它便是乙個unicode字元的資料型別。for example,如果想要建立乙個快取,用於存放最多為99個字元的unicode字串和乙個結尾為零的字元,可以使用下面這個語句:

wchar_t szbuffer[100];

當然,c裡面的字串函式,如strcpy、strchr、strcat等,只能對ansi字串進行操作,不能正確處理unicode,因此,ansi c補充了一組函式:

ansi:    char * strchr(const char * , int);

unicode: wchar_t * wcschr(const wchar_t * , wchar_t);

ansi:    int strcmp(const char * , const char *);

unicode: int wcscmp(const wchar_t * , const wchar_t *);

ansi:    char * strcpy(char * , const char *);

unicode: wchar_t * wcscpy(wchar_t * , const wchar_t *);

ansi:    size_t strlen(const char *);

unicode  size_t wcslen(const wchar_t *);

請注意,所有的unicode函式均以wcs開頭,wcs是寬字串的英文縮寫。若要呼叫unicode函式,只需用字首wcs來取代ansi字串函式的字首str即可。

一般情況下,對ansi和unicode字元操作的函式不要寫在同乙個源**檔案中,這會給編譯器編譯帶來很多麻煩(編譯錯誤),但實在有必要的時候,也可以將他們放在同乙個源**檔案中,這時候就需要包含乙個標頭檔案 tchar.h 。

tchar.h標頭檔案的唯一作用是就是幫助建立ansi/unicode通用的源**檔案。它的工作機制是,通過一組巨集,來決定呼叫的是str函式還是wcs函式。for example ,在tchar.h中定義有乙個巨集為_tcscpy,如果在包含該標頭檔案時沒有定義_unicode,那_tcscpy就想當於ansi的strcpy,如果定義了_unicode,則_tcscpy想當於wcscpy函式。

還有乙個值得注意的是,使用了tchar.h中的巨集的時候,若要生成乙個unicode字串而不是乙個ansi字串,則必須在字串前加上乙個大寫字元l,for example :

tchar * szerror = l"error";

大寫字母l的用意是告訴編譯器,該字串應該作為unicode字元來編譯。此舉隨之帶來的問題是,我們還需要定義個巨集來動態新增大寫字母l,以適應unicode/ansi通用源**檔案。這個巨集便是_text。

tchar *szerror = _texr("error");

如上這樣定義的話,就不論源**檔案中是否定義了_unicode,編譯器都能夠正確辨認並編譯。此外,_text巨集還可以用於檢驗字串的首字母。for example :

if(szerror[0] ==_text('j'))

else

2023年11月9日

讀書筆記 Windows核心程式設計

第二章 從windows nt後,windows所有版本都用unicode來構建。如果輸入乙個非unicom的字串,如ansi,函式會將其先轉換為unicode,再把結果傳回作業系統,這樣經過轉換後,需要更多的記憶體,而且執行速度更慢。並且,目前已知的windows的這些轉換函式存在一些bug。所有...

《Windows核心程式設計》讀書筆記(一)

第1章對程式錯誤的處理 1 常見的windows函式的返回型別 void 無返回值型,該函式的執行不可能失敗。windows函式很少此型別 bool 函式執行失敗則返回0,否則返回非0 handle 失敗則返回null,否則返回乙個可操作的物件的handle。注 有些函式會返回乙個控制代碼值inva...

《Windows核心程式設計》讀書筆記 四

第二章 unicode windows 中的unicode windows標頭檔案定義了幾種關於unicode的資料型別 wchar unicode字元 pwstr 指向unicode字串的指標 pcwstr 指向乙個恆定的unicode字串的指標 同時windows標頭檔案也定業了ansi uni...