標(biāo)題: CString--C++數(shù)據(jù)類型轉(zhuǎn)換詳解 [打印本頁]
作者: liuda 時(shí)間: 2015-1-23 02:11
標(biāo)題: CString--C++數(shù)據(jù)類型轉(zhuǎn)換詳解
作者:~風(fēng)中的葉~
一、自動轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換:
1.1數(shù)據(jù)類型自動轉(zhuǎn)換:
原則:短數(shù)據(jù)------à長數(shù)據(jù)
1.2數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換:
原則:長變短、有變無都是把存儲的數(shù)據(jù)直接從低位到高位復(fù)制(符號位也作為數(shù)據(jù)處理)。
例:int i; short j; j=(short)i;
例:longi; i=1L;
二、數(shù)據(jù)轉(zhuǎn)換為字符串(數(shù)組):
2.1轉(zhuǎn)成十進(jìn)制:
int i=100;
CString str;
str.Format(_T("%d"),i); //轉(zhuǎn)換成十進(jìn)制
%c 單個(gè)字符
%d 十進(jìn)制整數(shù)(int)
%ld 十進(jìn)制整數(shù)(long)
%f 十進(jìn)制浮點(diǎn)數(shù)(float)
%lf 十進(jìn)制浮點(diǎn)數(shù)(double)
%o 八進(jìn)制數(shù)
%s 字符串
%u 無符號十進(jìn)制數(shù)
%x 十六進(jìn)制數(shù)
或者
int i=100;
CString str;
char ch[8];
sprintf(ch,"%d",i);//只能轉(zhuǎn)成數(shù)組形式
str=ch;
或者
char ch[8];
char *chp;
chp=itoa(i,ch,10);
2.2轉(zhuǎn)成十六進(jìn)制:
int i=100;
CString str;
str.Format( _T("%.2x"),i); //轉(zhuǎn)換兩位十六進(jìn)制
三、數(shù)據(jù)串之間的轉(zhuǎn)換:
3.1字符串轉(zhuǎn)換為數(shù)組:
CString str=_T("12好asdf");
char ch[16]={0x00};
WideCharToMultiByte ( CP_ACP, //ANSI代碼頁
WC_COMPOSITECHECK, //檢查非映射復(fù)合字符
str, //原Unicode 串
str.GetLength(), //Unicode 長度(-1 意思是串以0x00結(jié)尾)
ch, //目的char字符串
sizeof(ch), //緩沖大小
NULL, //缺省字符串
NULL ); //忽略這個(gè)參數(shù)
3.2數(shù)組轉(zhuǎn)換為字符串:
char ch[8]="abc";//注意以’\0’=0結(jié)尾
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);//從左側(cè)截取兩個(gè)字節(jié)的數(shù)據(jù)
CString substr=str.Right(2); //從右側(cè)截取兩個(gè)字節(jié)的數(shù)據(jù)
CString substr=str.Mid(1,2); //參數(shù)1為左起始位數(shù),參數(shù)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);
五、 字符串轉(zhuǎn)換為數(shù)據(jù):
5.1字符串轉(zhuǎn)換為整型:
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字符串按十六進(jìn)制轉(zhuǎn)換為整型:
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碼
六、其他轉(zhuǎn)換 :
TCHAR是一種字符串類型,它讓你在以MBCS和UNICODE來build程序時(shí)可以使用同樣的代碼,不需要使用繁瑣的宏定義來包含你的代碼,而char代表ASCII的字符
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
所以用MBCS來build時(shí),TCHAR是char,使用UNICODE時(shí),TCHAR是wchar_t.
至于String,CString他們都是一種封裝了字串處理的操作!
你可以打開他們的源代碼找尋究竟!
CString屬于VC的類庫
string是標(biāo)準(zhǔn)C++的類庫
string.h是C的庫函數(shù)。
研究它們的源代好些!
TCHAR,char是可以同整型互換的類型。
String,CString代表了一塊內(nèi)存區(qū)域。
TCHAR 賦值
#include <tchar.h>
TCHAR szWindowText[256]=_T("QQ2006");
char*、TCHAR*轉(zhuǎn)換CString
CString str(****)
下面詳細(xì)寫一下其它轉(zhuǎn)換
- /* *********************************************************************
- * 函數(shù): TransCStringToTCHAR
- * 描述:將CString 轉(zhuǎn)換為 TCHAR*
- * 日期:
- ***********************************************************************/
- TCHAR* CPublic::CString2TCHAR(CString &str)
- {
- int iLen = str.GetLength();
- TCHAR* szRs = new TCHAR[iLen];
- lstrcpy(szRs, str.GetBuffer(iLen));
- str.ReleaseBuffer();
- return szRs;
- }
- /***********************************************************************
- * 函數(shù): THCAR2Char
- * 描述:將TCHAR* 轉(zhuǎn)換為 char*
- * 日期:
- ***********************************************************************
- */
- char* CPublic::THCAR2char(TCHAR* tchStr)
- {
- int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個(gè)字符,因此不用普通計(jì)算長度
- char* chRtn = new char[iLen+1]
- wcstombs(chRtn,tchStr,iLen+1);//轉(zhuǎn)換成功返回為非負(fù)值
- return chRtn;
- }
- /*
- ***********************************************************************
- * 函數(shù): CString2char
- * 描述:將CString轉(zhuǎn)換為 char*
- * 日期:
- ***********************************************************************
- */
- char* CPublic::CString2char(CString &str)
- {
- int len = str.GetLength();
- char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的長度中漢字算一個(gè)長度
- memset(chRtn, 0, 2*len+1);
- USES_CONVERSION;
- strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));
- return chRtn;
- }
//參考
///////////////////////
//Pocket PC上的UNICODE和ANSI字符串
////////////////////////
- /*
- ***********************************************************************
- * 函 數(shù) 名:GetAnsiString
- * 描 述:將CString(unicode)轉(zhuǎn)換為char*(ANSI)
- * 參 數(shù):CString &s 要轉(zhuǎn)換的CString
- * 返 回 值:返回轉(zhuǎn)換結(jié)果
- * 創(chuàng)建日期:
- * 最后修改:
- ***********************************************************************
- */
- char* GetAnsiString(const CString &s)
- {
- int nSize = 2*s.GetLength();
- char *pAnsiString = new char[nSize+1];
- wcstombs(pAnsiString, s, nSize+1);
- return pAnsiString;
- }
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
欧美一区视频
|
国产日韩欧美另类
|
91久久久久久久久
|
国产中的精品av涩差av
|
亚洲一区视频在线
|
美女天天操
|
日韩成人中文字幕
|
在线播放第一页
|
综合一区二区三区
|
久久精品欧美电影
|
国产精品久久
|
亚洲国产精品一区二区第一页
|
韩日中文字幕
|
又黄又爽的网站
|
国产免费观看一区
|
国产一级电影在线观看
|
亚洲视频免费在线看
|
精品国产一区二区在线
|
欧美日韩中文在线观看
|
免费久久久
|
精品网站999|
久久中文视频
|
一级a性色生活片久久毛片
午夜精品在线观看
|
欧美区在线
|
a久久久久久
|
亚洲国产精品一区二区三区
|
国产在线a|
操久久久|
成人精品一区二区三区中文字幕
|
国产精品一区二区三区久久久
|
日韩成人在线观看
|
久产久精国产品
|
亚洲综合在线视频
|
91精品中文字幕一区二区三区
|
婷婷不卡
|
在线免费观看毛片
|
aaa天堂|
欧美日日
|
国产十日韩十欧美
|
亚洲精品一区中文字幕
|
亚洲网站免费看
|