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); 此處沒(méi)有對(duì)應(yīng)的ftoa,故而使用sprintf實(shí)現(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)變?cè)?/span>string和char*之間轉(zhuǎn)變時(shí)常用,string.c_str()得到的為const char* const_cast<char*>( const char*) 6. 中文字符問(wèn)題,fstream打開(kāi)文件時(shí),在vs2008、vs2003之上文件路徑存在中文字符時(shí),文件無(wú)法打開(kāi)。解決辦法: locale::global(locale(“”));//文件打開(kāi)前 fstream.open(…); locale::global(locale(“C”));//文件打開(kāi)后,如果不使用該語(yǔ)句還原默認(rèn)設(shè)置,后續(xù)的cout會(huì)出現(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個(gè)參數(shù)設(shè)置為零時(shí),則不進(jìn)行轉(zhuǎn)換,而直接返回出對(duì)應(yīng)轉(zhuǎn)換所需要的存儲(chǔ)區(qū)大小。故而實(shí)際使用中常如下:
8. 獲取當(dāng)前時(shí)間,并轉(zhuǎn)換為字符串:
輸出:tmp = "2011/11/18 10:14:07"; 9. CString與LPSTR、LPWSTR之間的轉(zhuǎn)換,此處不作講解。CString的使用,根據(jù)項(xiàng)目設(shè)置不同,自動(dòng)調(diào)整為CStringW,CStringA分別對(duì)應(yīng)LPWSTR、LPSTR,在對(duì)應(yīng)狀況下都可直接轉(zhuǎn)。所以其實(shí)遇到的根本問(wèn)題還是LPSTR與LPWSTR之間的轉(zhuǎn)換。網(wǎng)上很多關(guān)于CString轉(zhuǎn)換的帖子,可直接參考。如果發(fā)現(xiàn)網(wǎng)上那些CString轉(zhuǎn)換的方法到你這里不行,不用去抱怨他們亂講,而是他們項(xiàng)目設(shè)置和你不一樣。具體做法參見(jiàn):7。 10. 補(bǔ)充:static_cast<>() const_cast<>() reinterpret_cast<> dynamic_cast<>()。這四種具體用法可google,很多時(shí)候他們的作用也很瀟灑。 C++的類型轉(zhuǎn)換是嚴(yán)重讓人能抓狂的問(wèn)題,很多時(shí)候不得不花費(fèi)時(shí)間去解決這些細(xì)節(jié)。本文中列舉的情形畢竟有限,尚未涉及萬(wàn)能類型之類的。希望閱讀此文的你,進(jìn)行補(bǔ)充,希望以后這篇文章以及這篇文章的評(píng)論可以解決大部分類型轉(zhuǎn)換問(wèn)題,權(quán)當(dāng)工具書(shū)使用吧。 |
|