Windows程式設計中的字元表示

2021-09-30 07:50:59 字數 2452 閱讀 1616

unicode:它是用兩個位元組表示乙個字元的方法。比如字元'a'在ascii下面是乙個字元,可'a'在unicode下面是兩個字元,高字元用0填充,而且漢字'程'在ascii下面是兩個位元組,而在unicode下仍舊是兩個位元組

。unicode的用處就是定長表示世界文字,據統計,用兩個位元組可以編碼現存的所有文字而沒有二義。

mbcs,它是多位元組字符集,它是不定長表示世界文字的編碼。mbcs表示英文本母時就和ascii一樣(這也是我們容易把mbcs和ascii搞混的原因),但表示其他文字時就需要用多位元組。 

windows 下面的程式設計可以支援mbcs和unicode兩種編碼的字串,具體用那種就看你定義了mbcs巨集還是unicode巨集。mbcs巨集對應的字串指標 是char*也就是lpstr,unicode對應的指標是unsigned   short*也就是lpwstr,為了寫程式方便微軟定義了型別lptstr,在mbcs下他就是char*,   在unicode下它是unsigned   char*,這樣你就可以重定義乙個巨集進行不同字符集的轉換了。

lptstr、lpcstr、lpctstr、lpstr的意義:

lpstr:32bit指標 指向乙個字串,每個字元佔1位元組

lpcstr:32-bit指標 指向乙個常字串,每個字元佔1位元組

lpctstr:32-bit指標 指向乙個常字串,每字元可能佔1位元組或2位元組,取決於unicode是否定義

lptstr:32-bit指標 每字元可能佔1位元組或2位元組,取決於unicode是否定義

windows使用兩種字符集ansi和unicode,前者就是通常使用的單位元組方式,但這種方式處理象中文這樣的雙位元組字元不方便,容易出現半個漢字的情況。而後者是雙位元組方式,方便處理雙位元組字元。

windowsnt 的所有與字元有關的函式都提供兩種方式的版本,而windows9x只支援ansi方式。_t一般同字常數相關,如_t("hello"。如果你編譯乙個 程式為ansi方式,_t實際不起任何作用。而如果編譯乙個程式為unicode方式,則編譯器會把"hello"字串以unicode方式儲存。_t 和_l的區別在於,_l不管你是以什麼方式編譯,一律unicode方式儲存.

windows核心程式設計的第一章。

l是表示字串資源為unicode的。

比如wchar_t str = l"hello world!";

這個就是雙子節儲存字元了。

_t是乙個適配的巨集~

當#ifdef _unicode的時候

_t就是l

沒有#ifdef _unicode的時候

_t就是ansi的。

比如lptstr lpstr = new tchar[32];

tchar* szbuf = _t("hello");

以上兩句使得無論是在unicode編譯條件下都是正確編譯的。

而且ms推薦你使用相匹配的字串函式。

比如處理lptstr或者lpctstr 的時候,不要用strlen ,而是要用_tcslen

否則在unicode的編譯條件下,strlen不能處理 wchar_t*的字串。

t是非常有意思的乙個符號(tchar、lpctstr、lptstr、_t()、_text()...),它表示使用一種中間型別,既不明確表示使用 mbcs,也不明確表示使用 unicode。那到底使用哪種字符集?編譯的時候才決定

在vc++中有著各種字串的表示法,如您所說。        

首先char*   是指向ansi字元陣列的指標,其中每個字元佔據8位(有效資料是除掉最高位的其他7位),這裡保持了與傳統的c,c++的相容。      

lp的含義是長指標(long   pointer)。

lpstr 是乙個指向以『/0』結尾的ansi字元陣列的指標,與char*可以互換使用,在win32中較多地使用lpstr。而lpcstr中增加的『c』的含 義是「constant」(常量),表明這種資料型別的例項不能被使用它的api函式改變,除此之外,它與lpstr是等同的。    

為了滿足程式**國際化的需要,業界推出了unicode標準,它提供了一種簡單和一致的表達字串的方法,所有字元中的位元組都是16位的值,其數量也可 以滿足差不多世界上所有書面語言字元的編碼需求,開發程式時使用unicode(型別為wchar_t)是一種被鼓勵的做法。    

lpwstr與lpcwstr由此產生,它們的含義類似於lpstr與lpcstr,只是字元資料是16位的wchar_t 而不是char。       

然後為了實現兩種編碼的通用,提出了tchar的定義:   

如果定義_unicode,宣告如下:     typedef   wchar_t   tchar;    

如果沒有定義_unicode,則宣告如下:     typedef   char   tchar;     

lptstr和lpctstr中的含義就是每個字元是這樣的tchar。       

cstring類中的字元就是被宣告為tchar型別的,它提供了乙個封裝好的類供使用者方便地使用。

程式設計中無窮的表示

int不能表達真正的無窮大或者無窮小。在c語言中,int為整型型別,根據不同平台不同,有16位 2位元組 和32位 4位元組 兩種,其中32位int為目前主流。無論哪種int型別都有其表達範圍,其中 16位int能表示的範圍為 32768 32767 32位int能表示的範圍為 2147483648...

程式設計中無窮的表示 轉

程式設計中無窮的表示 int不能表達真正的無窮大或者無窮小。在c語言中,int為整型型別,根據不同平台不同,有16位 2位元組 和32位 4位元組 兩種,其中32位int為目前主流。無論哪種int型別都有其表達範圍,其中 16位int能表示的範圍為 32768 32767 32位int能表示的範圍為...

Windows 程式設計中的問題

預設當前工作目錄 vcxproj 檔案所在的目錄,所以在設定相對路徑時需要根據這個檔案所在位置來設定。而直接執行exe時是相對於exe所在的目錄,或者執行exe時的工作目錄。執行庫配置 將相關的dll檔案新增到exe所在目錄 將dll檔案新增到 c windows system32 32bit 或者...