VC中的字串轉換巨集

2021-06-05 07:54:32 字數 1529 閱讀 7232

atl7.0引入了幾個新的轉換類和巨集,現有的巨集提供了顯著的改善。新的字串轉換類和巨集的名稱,採取的形式如下:

c sourcetype 2[c]destinationtype[ex] 

其中,[c]表示目的型別是const型別的,[ex]表示指定了儲存字串資料的固定靜態快取區的大小,如果字串轉換的結果超過了模板引數的大小,使用malloc分配空間,並在物件超出範圍時釋放記憶體。所以說這個轉換巨集(實質是個類)在迴圈中使用也是安全,它不會堆疊溢位。另外,如果試圖分配堆記憶體和失敗,它會呼叫atlthrow丟擲e_outofmemory異常資訊。

比較好的使用方法如下:

ca2t szr(szreplacefile);  

不贊成使用如下方法:

lpctstr szr = ca2t(szreplacefile); 

另外,可以指定緩衝區大小來做為模板引數,如下:

// changing the size of the buffer. 

void examplefunction4(lpcwstr pszw)  

指定**頁進行轉換,如下:

// specifying the code page. 

void examplefunction5(lpcwstr pszw)  

在實際應用中,ansi、unicode、utf-8之間的轉換比較多,方法可如下:

ansi→unicode

ca2w pszw(psza); 

ansi→utf-8

cw2a pszu8(ca2w(psza), cp_utf8); 

unicode→ansi

cw2a psza(pszw); 

unicode→utf-8

cw2a pszu8(pszw, cp_utf8); 

utf-8→ansi

cw2a psza(ca2w(pszu8, cp_utf8)); 

utf-8→unicode

ca2w pszw(pszu8, cp_utf8); 

對於通用字串_t()來說,如下:

_t→ansi

ct2a psza(pszt); 

_t→unicode

ct2w pszw(pszt); 

_t→utf-8

cw2a pszu8(ct2w(pszt), cp_utf8); 

ansi→_t

ca2t pszt(psza); 

unicode→_t

cw2t pszt(pszw); 

utf-8→_t

cw2t pszt(ca2w(pszu8, cp_utf8)); 

另外,對於cstring,還可以如下:

cstringa stra(pszw); 

cstringw strw(psza); 

cstring str(ca2w(pszu8, cp_utf8)); 

測試**如下:

void ctestfiletestdlg::ontest()  

以上輸出全部一樣,不管在多位元組下,還是unicode環境下。

VC中的字串轉換巨集

atl7.0引入了幾個新的轉換類和巨集,現有的巨集提供了顯著的改善。新的字串轉換類和巨集的名稱,採取的形式如下 c sourcetype 2 c destinationtype ex 其中,c 表示目的型別是const型別的,ex 表示指定了儲存字串資料的固定靜態快取區的大小,如果字串轉換的結果超過...

ATL字串轉換巨集

在標頭檔案中定義了atl提供的所有轉換巨集,如 a2cw lpcstr lpcwstr a2w lpcstr lpwstr w2ca lpcwstr lpcstr w2a lpcwstr lpstr 所有的巨集如下表所示 a2bstr ole2a t2aw2a a2cole ole2bstr t2b...

VC中數字與字串轉換方法

1 crt函式 ascii unicode tchar vs2005 int atoi wtoi tstoi ttoi atoi l wtoi l long atol wtol tstoi ttoi atoi l wtoi l int64 atoi64 wtoi64 tstoi64 ttoi64 a...