1. int與char*之間的轉(zhuǎn)換: int atoi(const char * str); 示例
輸出:num = 152; char* itoa(int Val, char * DstBuf, int Radix); 示例
輸出:ch =“123456” string=“123456” 2. long 與 char* 轉(zhuǎn)換 char* ltoa(long _Val, char * _DstBuf, int _Radix); long atol(const char* Str); 3. double與char*轉(zhuǎn)換 double atof(const char* String); 此處沒有對應的ftoa,故而使用sprintf實現(xiàn)。
輸出:ch = “12345.1230000” 4. char*與wchar_t*之間的轉(zhuǎn)換 size_t mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);
輸出:size = 12;wch = "i am student";
輸出:size = 12;ch = "i am student"; 5. const char* 轉(zhuǎn)換成 char*。該轉(zhuǎn)變在string和char*之間轉(zhuǎn)變時常用,string.c_str()得到的為const char* const_cast<char*>( const char*) 6. 中文字符問題,fstream打開文件時,在vs2008、vs2003之上文件路徑存在中文字符時,文件無法打開。解決辦法: locale::global(locale(“”));//文件打開前 fstream.open(…); locale::global(locale(“C”));//文件打開后,如果不使用該語句還原默認設置,后續(xù)的cout會出現(xiàn)亂碼。 7. 字符集之間轉(zhuǎn)換:LPSTR LPWSTR LPWSTR 轉(zhuǎn)變成 LPSTR
輸出:p = "i am a strudent"; LPSTR轉(zhuǎn)變成LPWSTR
輸出:pp = "i am a strudent"; 備注:WideCharToMultiByte與MultiByteToWideChar中第6個參數(shù)設置為零時,則不進行轉(zhuǎn)換,而直接返回出對應轉(zhuǎn)換所需要的存儲區(qū)大小。故而實際使用中常如下:
8. 獲取當前時間,并轉(zhuǎn)換為字符串:
輸出:tmp = "2011/11/18 10:14:07"; 9. CString與LPSTR、LPWSTR之間的轉(zhuǎn)換,此處不作講解。CString的使用,根據(jù)項目設置不同,自動調(diào)整為CStringW,CStringA分別對應LPWSTR、LPSTR,在對應狀況下都可直接轉(zhuǎn)。所以其實遇到的根本問題還是LPSTR與LPWSTR之間的轉(zhuǎn)換。網(wǎng)上很多關(guān)于CString轉(zhuǎn)換的帖子,可直接參考。如果發(fā)現(xiàn)網(wǎng)上那些CString轉(zhuǎn)換的方法到你這里不行,不用去抱怨他們亂講,而是他們項目設置和你不一樣。具體做法參見:7。 10. 補充:static_cast<>() const_cast<>() reinterpret_cast<> dynamic_cast<>()。這四種具體用法可google,很多時候他們的作用也很瀟灑。 C++的類型轉(zhuǎn)換是嚴重讓人能抓狂的問題,很多時候不得不花費時間去解決這些細節(jié)。本文中列舉的情形畢竟有限,尚未涉及萬能類型之類的。希望閱讀此文的你,進行補充,希望以后這篇文章以及這篇文章的評論可以解決大部分類型轉(zhuǎn)換問題,權(quán)當工具書使用吧。 |
|