作者:~風中的葉~
一、自動轉換和強制轉換:
1.1數據類型自動轉換: 原則:短數據------à長數據
1.2數據類型強制轉換: 原則:長變短、有變無都是把存儲的數據直接從低位到高位復制(符號位也作為數據處理)。 例:int i; short j; j=(short)i; 例:longi; i=1L; 二、數據轉換為字符串(數組): 2.1轉成十進制: int i=100; CString str; str.Format(_T("%d"),i); //轉換成十進制
%c 單個字符 %d 十進制整數(int) %ld 十進制整數(long) %f 十進制浮點數(float) %lf 十進制浮點數(double) %o 八進制數 %s 字符串 %u 無符號十進制數 %x 十六進制數 或者 int i=100; CString str; char ch[8]; sprintf(ch,"%d",i);//只能轉成數組形式 str=ch; 或者 char ch[8]; char *chp; chp=itoa(i,ch,10); 2.2轉成十六進制: int i=100; CString str; str.Format( _T("%.2x"),i); //轉換兩位十六進制 三、數據串之間的轉換: 3.1字符串轉換為數組: CString str=_T("12好asdf"); char ch[16]={0x00}; WideCharToMultiByte ( CP_ACP, //ANSI代碼頁 WC_COMPOSITECHECK, //檢查非映射復合字符 str, //原Unicode 串 str.GetLength(), //Unicode 長度(-1 意思是串以0x00結尾) ch, //目的char字符串 sizeof(ch), //緩沖大小 NULL, //缺省字符串 NULL ); //忽略這個參數 3.2數組轉換為字符串: char ch[8]="abc";//注意以’\0’=0結尾 CString str= (CA2CT)ch; 四、字符串其他處理: http://msdn.microsoft.com/zh-cn/library/tzzky29w(v=vs.80).aspx 4.1取字符串長度: int len = str.GetLength(); 4.2拼接字符串: CString str= str1 + str2; 4.3在字串中指定索引位插入指定字符:CString str.Insert(1,_T("a"));//在1號位之前插入a 4.4截取字串的一部分:CString substr=str.Left(2);//從左側截取兩個字節的數據 CString substr=str.Right(2); //從右側截取兩個字節的數據 CString substr=str.Mid(1,2); //參數1為左起始位數,參數2為截取幾位 4.5清除字串前后空格:str.Trim();//移除前后空格 清除字串前空格: str.TrimLeft();//移除后空格 清除字串前空格: str.TrimRight();//移除前空格 str.Remove(' ');//移除所有空格 4.6字符串替換: str.Replace(_T("12"),_T("34")); 4.7字符串刪除: str.Delete(1,6); 五、 字符串轉換為數據: 5.1字符串轉換為整型:
int i=atoi(str);//ANSI類型 int atoi(const char *nptr);
long i=atol(str);//ANSI類型 long atol(const char *nptr);
double i=atof(str);//ANSI類型 double atof(const char *nptr);
long i=strtol(str);//ANSI類型 long int strtol(const char *nptr,char **endptr,int base);
unsigned long i=strtoul(str,NULL);//ANSI類型 unsigned long strtoul(const char *nptr,char **endptr,int base);
double i=strtod(str,NULL);//ANSI類型 double strtod(const char *nptr,char **endptr);
int i=_wtoi(str);//Unicode碼
int i=_ttoi(str); //Unicode碼 5.2字符串按十六進制轉換為整型: long i=strtol(str,0,16);//ANSI類型
unsigned long i=strtoul(str,0,16);//ANSI類型
long i=wcstol(str,0,16);//Unicode碼
long i=_tcstol(str,0,16);//Unicode碼 六、其他轉換 :
TCHAR是一種字符串類型,它讓你在以MBCS和UNICODE來build程序時可以使用同樣的代碼,不需要使用繁瑣的宏定義來包含你的代碼,而char代表ASCII的字符
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
所以用MBCS來build時,TCHAR是char,使用UNICODE時,TCHAR是wchar_t.
至于String,CString他們都是一種封裝了字串處理的操作!
你可以打開他們的源代碼找尋究竟!
CString屬于VC的類庫
string是標準C++的類庫
string.h是C的庫函數。
研究它們的源代好些!
TCHAR,char是可以同整型互換的類型。
String,CString代表了一塊內存區域。
TCHAR 賦值
#include <tchar.h>
TCHAR szWindowText[256]=_T("QQ2006");
char*、TCHAR*轉換CString
CString str(****)
下面詳細寫一下其它轉換
- /* *********************************************************************
- * 函數: TransCStringToTCHAR
- * 描述:將CString 轉換為 TCHAR*
- * 日期:
- ***********************************************************************/
- TCHAR* CPublic::CString2TCHAR(CString &str)
- {
- int iLen = str.GetLength();
- TCHAR* szRs = new TCHAR[iLen];
- lstrcpy(szRs, str.GetBuffer(iLen));
- str.ReleaseBuffer();
- return szRs;
- }
- /***********************************************************************
- * 函數: THCAR2Char
- * 描述:將TCHAR* 轉換為 char*
- * 日期:
- ***********************************************************************
- */
- char* CPublic::THCAR2char(TCHAR* tchStr)
- {
- int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個字符,因此不用普通計算長度
- char* chRtn = new char[iLen+1]
- wcstombs(chRtn,tchStr,iLen+1);//轉換成功返回為非負值
- return chRtn;
- }
- /*
- ***********************************************************************
- * 函數: CString2char
- * 描述:將CString轉換為 char*
- * 日期:
- ***********************************************************************
- */
- char* CPublic::CString2char(CString &str)
- {
- int len = str.GetLength();
- char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的長度中漢字算一個長度
- memset(chRtn, 0, 2*len+1);
- USES_CONVERSION;
- strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));
- return chRtn;
- }
//參考
///////////////////////
//Pocket PC上的UNICODE和ANSI字符串
////////////////////////
- /*
- ***********************************************************************
- * 函 數 名:GetAnsiString
- * 描 述:將CString(unicode)轉換為char*(ANSI)
- * 參 數:CString &s 要轉換的CString
- * 返 回 值:返回轉換結果
- * 創建日期:
- * 最后修改:
- ***********************************************************************
- */
- char* GetAnsiString(const CString &s)
- {
- int nSize = 2*s.GetLength();
- char *pAnsiString = new char[nSize+1];
- wcstombs(pAnsiString, s, nSize+1);
- return pAnsiString;
- }
|