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...