cstring與unicode字符集

cstring與unicode字符集

ID:9407110

大?。?25.00 KB

頁數(shù):26頁

時間:2018-04-30

cstring與unicode字符集_第1頁
cstring與unicode字符集_第2頁
cstring與unicode字符集_第3頁
cstring與unicode字符集_第4頁
cstring與unicode字符集_第5頁
資源描述:

《cstring與unicode字符集》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應用文檔-天天文庫。

1、CString相關(guān)的知識1BSTR型轉(zhuǎn)化成CString型;2VARIANT型轉(zhuǎn)化成CString型;3載入字符串表資源;4CString和臨時對象;5CString的效率;6總結(jié)下面我分別討論。1、CString對象的連接  能體現(xiàn)出CString類型方便性特點的一個方面就字符串的連接,使用CString類型,你能很方便地連接兩個字符串,正如下面的例子:CStringgray("Gray");CStringcat("Cat");CStringgraycat=gray+cat;要比用下面的方法好得多:chargray[]="Gray";cha

2、rcat[]="Cat";char*graycat=malloc(strlen(gray)+strlen(cat)+1);strcpy(graycat,gray);strcat(graycat,cat);2、格式化字符串  與其用sprintf()函數(shù)或wsprintf()函數(shù)來格式化一個字符串,還不如用CString對象的Format()方法:CStrings;s.Format(_T("Thetotalis%d"),total);  用這種方法的好處是你不用擔心用來存放格式化后數(shù)據(jù)的緩沖區(qū)是否足夠大,這些工作由CString類替你完成?! ?/p>

3、格式化是一種把其它不是字符串類型的數(shù)據(jù)轉(zhuǎn)化為CString類型的最常用技巧,比如,把一個整數(shù)轉(zhuǎn)化成CString類型,可用如下方法:CStrings;s.Format(_T("%d"),total);  我總是對我的字符串使用_T()宏,這是為了讓我的代碼至少有Unicode的意識,當然,關(guān)于Unicode的話題不在這篇文章的討論范圍。_T()宏在8位字符環(huán)境下是如下定義的:#define_T(x)x//非Unicode版本(non-Unicodeversion)而在Unicode環(huán)境下是如下定義的:#define_T(x)L##x//Uni

4、code版本(Unicodeversion)所以在Unicode環(huán)境下,它的效果就相當于:s.Format(L"%d",total);  如果你認為你的程序可能在Unicode的環(huán)境下運行,那么開始在意用Unicode編碼。比如說,不要用sizeof()操作符來獲得字符串的長度,因為在Unicode環(huán)境下就會有2倍的誤差。我們可以用一些方法來隱藏Unicode的一些細節(jié),比如在我需要獲得字符長度的時候,我會用一個叫做DIM的宏,這個宏是在我的dim.h文件中定義的,我會在我寫的所有程序中都包含這個文件:#defineDIM(x)(sizeof

5、((x))/sizeof((x)[0]))  這個宏不僅可以用來解決Unicode的字符串長度的問題,也可以用在編譯時定義的表格上,它可以獲得表格的項數(shù),如下:classWhatever{...};Whateverdata[]={{...},...{...},};for(inti=0;i

6、zeof(data)-1);//WRONG!lstrcpyn(data,longstring,DIM(data)-1);//RIGHTWriteFile(f,data,DIM(data),&bytesWritten,NULL);//WRONG!WriteFile(f,data,sizeof(data),&bytesWritten,NULL);//RIGHT造成以上原因是因為lstrcpyn需要一個字符個數(shù)作為參數(shù),但是WriteFile卻需要字節(jié)數(shù)作為參數(shù)。同樣需要注意的是有時候需要寫出數(shù)據(jù)的所有內(nèi)容。如果你僅僅只想寫出數(shù)據(jù)的真實長度,你可能

7、會認為你應該這樣做:WriteFile(f,data,lstrlen(data),&bytesWritten,NULL);//WRONG但是在Unicode環(huán)境下,它不會正常工作。正確的做法應該是這樣:WriteFile(f,data,lstrlen(data)*sizeof(TCHAR),&bytesWritten,NULL);//RIGHT  因為WriteFile需要的是一個以字節(jié)為單位的長度。(可能有些人會想“在非Unicode的環(huán)境下運行這行代碼,就意味著總是在做一個多余的乘1操作,這樣不會降低程序的效率嗎?”這種想法是多余的,你必

8、須要了解編譯器實際上做了什么,沒有哪一個C或C++編譯器會把這種無聊的乘1操作留在代碼中。在Unicode環(huán)境下運行的時候,你也不必擔心那個乘2操作會降低程序的效率

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。