




已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
CString 類型轉(zhuǎn)換大全首頁CString轉(zhuǎn)int _ttoi() _tcstoul() Format ASSERT() 作者: tags:Form for TC ORM String int CString assert str sse ing for in assert int _ttoi() _tcstoul() Format ASSERT() -CString 型轉(zhuǎn)化成 int 型把 CString 類型的數(shù)據(jù)轉(zhuǎn)化成整數(shù)類型最簡單的方法就是使用標(biāo)準(zhǔn)的字符串到整數(shù)轉(zhuǎn)換例程。雖然通常你懷疑使用_atoi()函數(shù)是一個好的選擇,它也很少會是一個正確的選擇。假如你預(yù)備使用 Unicode 字符,你應(yīng)該用_ttoi(),它在 ANSI 編碼系統(tǒng)中被編譯成_atoi(),而在 Unicode 編碼系統(tǒng)中編譯成_wtoi()。你也可以考慮使用_tcstoul()或者_(dá)tcstol(),它們都能把字符串轉(zhuǎn)化成任意進(jìn)制的長整數(shù)(如二進(jìn)制、八進(jìn)制、十進(jìn)制或十六進(jìn)制),不同點在于前者轉(zhuǎn)化后的數(shù)據(jù)是無符號的(unsigned),而后者相反??聪旅娴睦樱篊String hex = _T(FAB);CString decimal = _T(4011);ASSERT(_tcstoul(hex, 0, 16) = _ttoi(decimal); 在做DWORD與 CString 比較的時候 ,需要將CString 轉(zhuǎn)換成 DWORD,有幾種轉(zhuǎn)換方法,但是明明轉(zhuǎn)換結(jié)果是一樣的,可就是提示不相等,后來 _tcstoul()轉(zhuǎn)換后才相等 ,記錄下 CString str = lp-GetSubItem(nCol); / MessageBox(str,m_strItem,MB_OK); DWORD dwData = _tcstoul( str, NULL, 10 ); / 10進(jìn)制 if (dwItem =dwData) /AfxMessageBox(找到找到找到找到找到找到找到找到找到找到找到找到找到); return pCur; 使用_tcstoul()或者_(dá)tcstol(),它們都能把字符串轉(zhuǎn)化成任意進(jìn)制的長整數(shù)(如二進(jìn)制、八進(jìn)制、十進(jìn)制或十六進(jìn)制),不同點在于前者轉(zhuǎn)化后的數(shù)據(jù)是無符號的(unsigned),而后者相反??聪旅娴睦樱篊String hex = _T(FAB);CString decimal = _T(4011);ASSERT(_tcstoul(hex, 0, 16) = _ttoi(decimal);/Format函數(shù)VC+中Format函數(shù)詳解首先看它的聲明:function Format(const Format: string; const Args: array of const): string; overload;事實上Format方法有兩個種形式,另外一種是三個參數(shù)的,主要區(qū)別在于它是線程安全的,但并不多用,所以這里只對第一個介紹:function Format(const Format: string; const Args: array of const): string; overload;Format參數(shù)是一個格式字符串,用于格式化Args里面的值的。Args又是什么呢,它是一個變體數(shù)組,即它里面可以有多個參數(shù),而且每個參數(shù)可以不同。如以下例子:Format(my name is %6s,wind);返回后就是my name is wind現(xiàn)在來看Format參數(shù)的具體情況:Format里面可以寫普通的字符串,比如my name is但有些格式指令字符具有非凡意義,比如%6s格式指令具有以下的形式:% index : - width . prec type它是以%開始,而以type結(jié)束,type表示一個具體的類型。中間是用來格式化type類型的指令字符,是可選的。先來看看type,type可以是以下字符:d十制數(shù),表示一個整型值u和d一樣是整型值,但它是無符號的,而假如它對應(yīng)的值是負(fù)的,則返回時是一個2的32次方減去這個絕對值的數(shù)如:Format(this is %u,-2);返回的是:this is 4294967294f對應(yīng)浮點數(shù)e科學(xué)表示法,對應(yīng)整型數(shù)和浮點數(shù),比如Format(this is %e,-2.22);返回的是:this is -2.220000E+000等一下再說明假如將數(shù)的精度縮小g這個只能對應(yīng)浮點型,且它會將值中多余的數(shù)去掉比如Format(this is %g,02.200);返回的是:this is 2.2n只能對應(yīng)浮點型,將值轉(zhuǎn)化為號碼的形式??匆粋€例子就明白了Format(this is %n,4552.2176);返回的是this is 4,552.22注重有兩點,一是只表示到小數(shù)后兩位,等一下說怎么消除這種情況二是,即使小數(shù)沒有被截斷,它也不會也像整數(shù)部分一樣有逗號來分開的m錢幣類型,但關(guān)于貨幣類型有更好的格式化方法,這里只是簡單的格式化另外它只對應(yīng)于浮點值Format(this is %m,9552.21);返回:this is ¥9,552.21p對應(yīng)于指針類型,返回的值是指針的地址,以十六進(jìn)制的形式來表示例如:Format(this is %p,p);Edit1的內(nèi)容是:this is 0012F548s對應(yīng)字符串類型,不用多說了吧x必須是一個整形值,以十六進(jìn)制的形式返回Format(this is %X,15);返回是:this is F類型講述完畢,下面介紹格式化Type的指令:index :這個要怎么表達(dá)呢,看一個例子Format(this is %d %d,12,13);其中第一個%d的索引是0,第二個%d是1,所以字符顯示的時候是這樣this is 12 13而假如你這樣定義:Format(this is %1:d %0:d,12,13);那么返回的字符串就變成了this is 13 12現(xiàn)在明白了嗎,index : 中的index指示Args中參數(shù)顯示的順序還有一種情況,假如這樣Format(%d %d %d %0:d %d, 1, 2, 3, 4) ;將返回1 2 3 1 2。假如你想返回的是1 2 3 1 4,必須這樣定:Format(%d %d %d %0:d %3:d, 1, 2, 3, 4) ;但用的時候要注重,索引不能超出Args中的個數(shù),不然會引起異常如Format(this is %2:d %0:d,12,13);由于Args中只有12 13 兩個數(shù),所以Index只能是0或1,這里為2就錯了width指定將被格式化的值占的寬度,看一個例子就明白了Format(this is %4d,12);輸出是:this is 12這個是比較輕易,不過假如Width的值小于參數(shù)的長度,則沒有效果。如:Format(this is %1d,12);輸出是:this is 12-這個指定參數(shù)向左齊,和width合在一起最可以看到效果:Format(this is %-4d,yes,12);輸出是:this is 12 ,yes. prec指定精度,對于浮點數(shù)效果最佳:Format(this is %.2f,1.1234);輸出 this is 1.12Format(this is %.7f,1.1234);輸了 this is 1.1234000而對于整型數(shù),假如prec比如整型的位數(shù)小,則沒有效果反之比整形值的位數(shù)大,則會在整型值的前面以0補(bǔ)之Format(this is %.7d,1234);輸出是:this is 0001234對于字符型,剛好和整型值相反,假如prec比字符串型的長度大則沒有效果,反之比字符串型的長度小,則會截斷尾部的字符Format(this is %.2s,1234);輸出是 this is 12而上面說的這個例子:Format(this is %e,-2.22);返回的是:this is -2.22000000000000E+000怎么去掉多余的0呢,這個就行啦Format(this is %.2e,-2.22);好了,第一個總算講完了,應(yīng)該對他的應(yīng)用很熟知了吧/二 FormatDateTime的用法他的聲明為:function FormatDateTime(const Format: string; DateTime: TDateTime): string;overload;當(dāng)然和Format一樣還有一種,但這里只介紹常用的第一種Format參數(shù)是一個格式化字符串。DateTime是時間類型。返回值是一種格式化后的字符串重點來看Format參數(shù)中的指令字符c 以短時間格式顯示時間,即全部是數(shù)字的表示FormatdateTime(c,now);輸出為:2004-8-7 9:55:40d 對應(yīng)于時間中的日期,日期是一位則顯示一位,兩位則顯示兩位FormatdateTime(d,now);輸出可能為131dd 和d的意義一樣,但它始終是以兩位來顯示的FormatdateTime(dd,now);輸出可能為0131ddd 顯示的是星期幾FormatdateTime(ddd,now);輸出為: 星期六dddd 和ddd顯示的是一樣的。但上面兩個假如在其他國家可能不一樣。ddddd 以短時間格式顯示年月日FormatdateTime(ddddd,now);輸出為:2004-8-7dddddd 以長時間格式顯示年月日FormatdateTime(dddddd,now);輸出為:2004年8月7日e/ee/eee/eeee 以相應(yīng)的位數(shù)顯示年FormatdateTime(ee,now);輸出為:04 (表示04年)m/mm/mmm/mmmm 表示月FormatdateTime(m,now);輸出為:8FormatdateTime(mm,now);輸出為 08FormatdateTime(mmm,now);輸出為 八月FormatdateTime(mmmm,now);輸出為 八月和ddd/dddd 一樣,在其他國家可能不同yy/yyyy 表示年FormatdateTime(yy,now);輸出為 04FormatdateTime(yyyy,now);輸出為 2004h/hh,n/nn,s/ss,z/zzz 分別表示小時,分,秒,毫秒t 以短時間格式顯示時間FormatdateTime(t,now);輸出為 10:17tt 以長時間格式顯示時間FormatdateTime(tt,now);輸出為10:18:46ampm 以長時間格式顯示上午還是下午FormatdateTime(ttampm,now);輸出為:10:22:57上午大概如此,假如要在Format中加普通的字符串,可以用雙引號隔開那些特定義的字符,這樣普通字符串中假如含非凡的字符就不會被顯示為時間格式啦:FormatdateTime(today is c,now);輸出為:today is 2004-8-7 10:26:58時間中也可以加-或來分開日期:FormatdateTime(today is yy-mm-dd,now);FormatdateTime(today is yymmdd,now);輸出為: today is 04-08-07也可以用:來分開時間FormatdateTime(today is hh:nn:ss,now);輸出為:today is 10:32:23/三.FormatFloat的用法常用的聲明:function FormatFloat(const Format: string; Value: Extended): string; overload;和上面一樣Format參數(shù)為格式化指令字符,Value為Extended類型為什么是這個類型,因為它是所有浮點值中表示范圍最大的,假如傳入該方法的參數(shù)比如Double或者其他,則可以保存不會超出范圍。要害是看Format參數(shù)的用法0 這個指定相應(yīng)的位數(shù)的指令。比如:FormatFloat(000.000,22.22);輸出的就是022.220注重一點,假如整數(shù)部分的0的個數(shù)小于Value參數(shù)中整數(shù)的位數(shù),則沒有效果如:FormatFloat(0.00,22.22);輸出的是:22.22但假如小數(shù)部分的0小于Value中小數(shù)的倍數(shù),則會截去相應(yīng)的小數(shù)和位數(shù)如:FormatFloat(0.0,22.22);輸出的是:22.2也可以在整數(shù)0中指定逗號,這個整數(shù)位數(shù)必須大于3個,才會有逗號出句FormatFloat(0,000.0,2222.22);輸出是:2,222.2假如這樣FormatFloat(000,0.0,2222.22);它的輸出還是:2,222.2注重它的規(guī)律# 和0的用法一樣,目前我還沒有測出有什么不同。FormatFloat(#.#,22.22);輸出是:22.00E 科學(xué)表示法,看幾個例子大概就明白了FormatFloat(0.00E+00,2222.22);輸出是 2.22E+03FormatFloat(0000.00E+00,2222.22);輸出是 2222.22E+00FormatFloat(00.0E+0,2222.22);22.2E+2明白了嗎,全靠E右邊的0來支配的。/ANSI 和 UNICODE 的函數(shù)對應(yīng)表 ANSI UNICODE通用(char.h) (wchar.h) (tchar.h)char wchar_t TCHARchar * wchar_t * PTCHAR (PTSTR,LPWSTR,PWSTR,WCHAR)printf wprintf _tprintfscanf wscanf_tscanfatoi _wtoi _ttoiatol _wtol _ttolitoa _itow _itotltoa _ltow _ltotatof _wtof _tstofstrlen wcslen_tcslenstrcat wcscat _tcscatstrcpy wcscpy_tcscpystrcmpwcscmp_tcscmpASCIIUNICODETCHARVS2005intatoi_wtoi_tstoi_ttoi_atoi_l_wtoi_llongatol_wtol_tstoi_ttoi_atoi_l_wtoi_l_int64_atoi64_wtoi64_tstoi64_ttoi64_atoi64_l_wtoi64_lfloat_atoflt_atoflt_ldoubleatof_wtof_tstof_ttof_atof_l_wtof_l_atodbl_atodbl_llong double_atoldbl_atoldbl_latof, _atof_l, _wtof, _wtof_lConvert string to floatatoi, _atoi_l, _wtoi, _wtoi_lConvert string to int_atoi64, _atoi64_l, _wtoi64, _wtoi64_lConvert string to _int64atol, _atol_l, _wtol, _wtol_lConvert string to long_ecvt, _ecvt_sConvert double to string of specified length_fcvt, _fcvt_sConvert double to string with specified number of digits following decimal point_gcvt, _gcvt_sConvert double number to string; store string in buffer_itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow, _itoa_s, _i64toa_s, _ui64toa_s, _itow_s, _i64tow_s, _ui64tow_sConvert int or _int64 to string_ltoa, _ltow, _ltoa_s, _ltow_sConvert long to stringstrtod, _strtod_l, wcstod, _wcstod_lConvert string to doublestrtol, wcstol, _strtol_l, _wcstol_lConvert string to long integerstrtoul, _strtoul_l, wcstoul, _wcstoul_lConvert string to unsigned long integer_ultoa, _ultow, _ultoa_s, _ultow_sConvert unsigned long to stringatof, _atof_l, _wtof, _wtof_lConvert wide-character string to a doubleatoi, _atoi_l, _wtoi, _wtoi_lConvert wide-character string to int_atoi64, _atoi64_l, _wtoi64, _wtoi64_lConvert wide-character string to _int64atol, _atol_l, _wtol, _wtol_lConvert wide-character string to long/ASSERT()是一個調(diào)試程序時經(jīng)常使用的宏,在程序運(yùn)行時它計算括號內(nèi)的表達(dá)式,假如表達(dá)式為FALSE (0), 程序?qū)蟾驽e誤,并終止執(zhí)行。假如表達(dá)式不為0,則繼續(xù)執(zhí)行后面的語句。這個宏通常原來判定程序中是否出現(xiàn)了明顯非法的數(shù)據(jù),假如出現(xiàn)了終止程序以免導(dǎo)致嚴(yán)重后果,同時也便于查找錯誤。 ASSERT只有在Debug版本中才有效,假如編譯為Release版本則被忽略。 - ASSERT宏定義如下 #define ASSERT(f) do if (!(f) & AfxAssertFailedLine(THIS_FILE, _LINE_) AfxDebugBreak(); while (0) ASSERT(邏輯表達(dá)式) 假如括號中的邏輯表達(dá)式值為假的話,會彈出調(diào)試命令窗口,提示具體在哪個文件的哪一行發(fā)生了斷言錯誤! - ASSERT Evaluates an expression, and displays a diagnostic message if the expression is FALSE. Ignored in retail builds. Syntax ASSERT( cond ); Parameters cond Expression to evaluate. Remarks In debug builds, if the expression is FALSE, this macro displays a message box with the text of the expression, the name of the source file, and the line number. The user can ignore the assertion, enter the debugger, or quit the application. Example ASSERT(rtStartTime = rtEndTime); - 斷言(ASSERT)的使用,方法很簡單。為什么要用,初學(xué)者可能比較迷惑。 契約式編程講的比較清楚,建議可以先看看這類書。 一個函數(shù)由前置條件、后置條件和不變式組成。在VC中,我們可以通過斷言來保證這三個條件??梢源蟠筇岣吡塑浖馁|(zhì)量。 - 假如ASSERT()中的條件不成立(比如 ASSERT(0) ; ),會彈出一個比較嚇人的對話框。 點擊重試,可以到達(dá) ASSERT 斷言不成立的那一行, 此時可以在watch窗口查看變量值,找出出錯的原因。 假如程序能夠繼續(xù)運(yùn)行,可以按F5繼續(xù)調(diào)試。怎么從CString 轉(zhuǎn)換到 char *CString str(abc); char *str1; str1=(LPSTR)(LPCTSTR)str;應(yīng)該得行!c+中char* string CString的互相轉(zhuǎn)換 收藏 #include /使用C+標(biāo)準(zhǔn)庫的string類時using namespace std; /同上#include #include #include /要將string類和int類型直接轉(zhuǎn)換最好有這些包含, /因為自己寫一個轉(zhuǎn)換函數(shù)比較方便,函數(shù)定義參考如下string getstring ( const int n ) std:stringstream newstr; newstr CStringCString.format(”%s”, string.c_str();用c_str()確實比data()要好.2,char - stringstring s(char *);只能初始化,在不是初始化的地方最好還是用assign().3,CString - stringstring s(CString.GetBuffer();GetBuffer()后一定要ReleaseBuffer(),否則就沒有釋放緩沖區(qū)所占的空間.C+標(biāo)準(zhǔn)函數(shù)庫中說的有三個函數(shù)可以將字符串的內(nèi)容轉(zhuǎn)換為字符數(shù)組和Cstring1.data(),返回沒有”0“的字符串?dāng)?shù)組2,c_str(),返回有”0“的字符串?dāng)?shù)組3,copy()CString
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六一活動游街活動方案
- 六一活動踢球活動方案
- 六一游園手工活動方案
- 六一玩具團(tuán)隊活動方案
- 六一結(jié)對活動方案
- 六一節(jié)團(tuán)委活動方案
- 六一節(jié)景區(qū)活動方案
- 六一葵花義賣活動方案
- 醫(yī)生的考試試題及答案
- 醫(yī)德醫(yī)風(fēng)考試試題及答案
- 第4章 頜位(雙語)
- 課程綜述(數(shù)電)
- 塔吊負(fù)荷試驗方案
- 購買社區(qū)基本公共養(yǎng)老、青少年活動服務(wù)實施方案
- 傷口和傷口敷料基礎(chǔ)知識.ppt
- 安徽省中等職業(yè)學(xué)校學(xué)歷證明書辦理申請表
- 《慢性腎臟病》PPT課件.ppt
- 例析物理競賽中純電阻電路的簡化和等效變換
- 六年級下冊美術(shù)課件第13課《祖國美景知多少》浙美版
- 智能照明系統(tǒng)的外文文獻(xiàn)原稿和譯文.doc
- 氣象觀測場坪防雷設(shè)計
評論
0/150
提交評論