• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            VC之CString,wchar_t,int,string,char*之間的轉(zhuǎn)換

            CString 轉(zhuǎn) wchar_t

            CString path = "asdf";

            wchar_t wstr[256] = path.AllocSysString();

            或者:

            wchar_t wcstring[256];

            MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);

            wchar_t轉(zhuǎn)CString

            WideCharToMultiByte(CP_ACP,0,wcstring,256,

            path.GetBuffer(0),256,NULL,NULL);

            path.ReleaseBuffer(0);

             

            string 轉(zhuǎn) CString
            CString.format("%s", string.c_str());

            char 轉(zhuǎn) CString
            CString.format("%s", char*);

            char 轉(zhuǎn) string
            string s(char *);

            string 轉(zhuǎn) char *
            char *p = string.c_str();

            CString 轉(zhuǎn) string
            string s(CString.GetBuffer());

            CString   str   =   "fdjfdas";   
            string   s   =   (LPCTSTR)str;

            1,string -> CString
            CString.format("%s", string.c_str());
            用c_str()確實(shí)比data()要好.
            2,char -> string
            string s(char *);
            你的只能初始化,在不是初始化的地方最好還是用assign().
            3,CString -> string
            string s(CString.GetBuffer());
            GetBuffer()后一定要ReleaseBuffer(),否則就沒有釋放緩沖區(qū)所占的空間.


            《C++標(biāo)準(zhǔn)函數(shù)庫》中說的
            有三個(gè)函數(shù)可以將字符串的內(nèi)容轉(zhuǎn)換為字符數(shù)組和C—string
            1.data(),返回沒有”\0“的字符串?dāng)?shù)組
            2,c_str(),返回有”\0“的字符串?dāng)?shù)組
            3,copy()

            ---------------------------------------------------------------

            CString與int、char*、char[100]之間的轉(zhuǎn)換- -


            CString與int、char*、char[100]之間的轉(zhuǎn)換- -

            CString互轉(zhuǎn)int

            將字符轉(zhuǎn)換為整數(shù),可以使用atoi、_atoi64或atol。
            而將數(shù)字轉(zhuǎn)換為CString變量,可以使用CString的Format函數(shù)。如
            CString s;
            int i = 64;
            s.Format("%d", i)
            Format函數(shù)的功能很強(qiáng),值得你研究一下。

            void CStrDlg::OnButton1()
            {
            // TODO: Add your control notification handler code here
            CString ss="1212.12";
            int temp=atoi((char*)LPCTSTR(ss));

            CString aa;
            aa.Format("%d",temp);
            AfxMessageBox("var is " + aa);
            }

            sart.Format("%s",buf);

            CString互轉(zhuǎn)char*

            ///char * TO cstring
            CString strtest;
            char * charpoint;
            charpoint="give string a value";
            strtest=charpoint;


            ///CString TO char *
            charpoint=strtest.GetBuffer(strtest.GetLength());

            標(biāo)準(zhǔn)C里沒有string,char *==char []==string

             

            char *轉(zhuǎn)成CString

            可以用CString.Format("%s",char *)這個(gè)方法來將char *轉(zhuǎn)成CString。

            CString轉(zhuǎn)成char *

            用操作符(LPCSTR)strtest 或者 (char*)(LPCSTR)strtest 就可以了。


            CString轉(zhuǎn)換 char[100]

            char a[100];
            CString str("aaaaaa");
            strncpy(a,(LPCTSTR)str,sizeof(a));

            Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1570001

            (一) 概述

            string和CString均是字符串模板類,string為標(biāo)準(zhǔn)模板類(STL)定義的字符串類,已經(jīng)納入C++標(biāo)準(zhǔn)之中;

            CString(typedef CStringT > CString)為Visual C++中最常用的字符串類,繼承自CSimpleStringT類,主要應(yīng)用在MFC和ATL編程中,主要數(shù)據(jù)類型有char(應(yīng)用于ANSI),wchar_t(unicode),TCHAR(ANSI與unicode均可);

            char*為C編程中最常用的字符串指針,一般以'\0'為結(jié)束標(biāo)志;

            (二) 構(gòu)造

            string是方便的,可以從幾乎所有的字符串構(gòu)造而來,包括CString和char*;

            CString次之,可以從基本的一些字符串變量構(gòu)造而來,包括char*等;

            char*沒有構(gòu)造函數(shù),僅可以賦值;

            舉例:

            char* psz = “joise”;

            CString cstr( psz );

            string str( cstr );

            (三) 運(yùn)算符重載

            a) operator=

            string是最方便的,幾乎可以直接用所有的字符串賦值,包括CString和char*;

            CString次之,可以直接用些基本的字符串賦值,包括char*等;

            char*只能由指針賦值,并且是極危險(xiǎn)的操作,建議使用strcpy或者memcpy,而且char*在聲明的時(shí)候如未賦初值建議先設(shè)為NULL,以避免野指針,令你抓狂;

            舉例:

            char *psz = NULL;

            psz = new char[10]; //當(dāng)然,以上的直接寫成char *psz = new char[10];也是一樣

            memset( psz, 0, 10 );

            strcpy( psz, “joise” );

            CString cstr;

            cstr = psz;

            string str;

            str = psz;

            str = cstr;

            delete []psz;

            b) operator+

            string與CString差不多,可以直接與char*進(jìn)行加法,但不可以相互使用+運(yùn)算符,即string str = str + cstr是非法的,須轉(zhuǎn)換成char*;

            char*沒有+運(yùn)算,只能使用strcat把兩個(gè)指針連在一起;

            舉例:

            char* psz = “joise”;

            CString cstr = psz;

            cstr = cstr + psz;

            string str = psz;

            str = str + str + psz;

            strcat( psz, psz );

            strcat( psz, cstr );//合法

            strcat( psz, str );//非法,由此可見,CString可自動(dòng)轉(zhuǎn)換為const char*,而string不行

            c) operator +=

            string是最強(qiáng)大的,幾乎可以與所有的字符串變量+=,包括CString和char*;

            CString次之,可以與基本的一些字符串變量進(jìn)行+=而來,包括char*等;

            char*沒有+=運(yùn)算符,只能使用strcat把兩個(gè)指針連在一起;

            d) operator[]

            CString最好,當(dāng)越界時(shí)會(huì)拋出斷言異常;

            string與char*下標(biāo)越界結(jié)果未定義;

            舉例:

            char* psz = “joise”;

            CString cstr = psz;

            cout << cstr[8];

            string str = psz;

            cout << str[8];

            cout << psz[8];

            e) operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=

            CString與string之間不可以進(jìn)行比較,但均可以與char*進(jìn)行比較,并且比較的是值,而不是地址;

            cout << ( psz == cstr );

            cout << ( psz == str );

            cout << ( str == psz );

            cout << ( cstr == psz );//以上代碼返回均為1

            (四) 常用算法

            a) 查找

            作用 char* string CString
            查找指定值 strchr
            strstr
            strrstr
            strspn find Find
            第一個(gè)匹配的值 fild_first_of FindOneOf 從后面開始查找 ReserveFind 指定匹配方式 find_if

            注:find_if中是把范圍內(nèi)的值挨個(gè)代入匹配函數(shù)直至返回true

            b) 比較

            作用 char* string CString 查找指定值(區(qū)分大小寫) strcmp
            strncmp
            strcoll
            _strncoll operator<
            operator>
            operator<=
            operator>=
            operator==
            operator!= Collate

            Compare 查找指定值(不區(qū)分大小寫) _stricmp
            _strnicmp
            _stricoll
            _strnicoll CollateNoCase

            CompareNoCas

            注:返回值如果<0則前面的值小于后面的值,反之亦然

            c) 替換

            作用 char* string CString 查找指定值 _strset
            _strnset
            replace
            replace_copy
            replace_copy_if
            replace_if Replace

            d) 插入

            作用 char* string CString 查找指定值 insert Insert
            e) 增加 作用 char* string CString 動(dòng)態(tài)增加值 strcat push

            append Append

            AppendChar

            AppendFormat


            f) 截取

            作用 char* string CString 得到部分值 用下標(biāo)操作 substr Left

            Mid

            Right

            Truncate


            g) 移除

            作用 char* string CString 移除部份值 remove Remove 移除空白值 RemoveBlanks

            注:此為ATL提供,非C函數(shù) remove_if Trim

            TrimLeft

            TrimRig


            h) 轉(zhuǎn)換大小寫

            作用 char* string CString 轉(zhuǎn)換大小寫 _strlwr

            _strupr MakeLower

            MakeUpper


            i) 與其他類型轉(zhuǎn)換

            作用 char* string CString 轉(zhuǎn)化為數(shù)字 atoi

            atod

            atof Format 轉(zhuǎn)化為char* c_str
            GetBuffer

            GetBufferSetLen

            j) 格式化

            作用 char* string CString 格式化 sprintf Format


            k) 得到長(zhǎng)度

            作用 char* string CString
            得到長(zhǎng)度 strlen length GetLength 得到大小 size GetAllocLength

            l) 判斷為空

            作用 char* string CString 判斷是否為空判斷是否==NULL或者第一個(gè)字符是否是'\0' empty IsEmpty

            m) 重定義大小

            作用 char* string CString 重定義大小 realloc
            new resize GetBufferSetLength

            n) 釋放資源

            作用 char* string CString 釋放 free

            delete (delete[]) ReleaseBuffer

            ReleaseBufferSetLength

            (五) 安全性>

            CString > string > char*;

            (六) 靈活性

            CString > string >char*;

            (七) 可移植性

            char* = string > CString 

            posted on 2010-02-24 09:46 wrh 閱讀(8063) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            <2010年2月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28123456
            78910111213

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久成人永久免费播放| 97久久婷婷五月综合色d啪蜜芽| 一本久久知道综合久久| 无码人妻久久一区二区三区| 国产精品久久久久天天影视 | 久久伊人影视| 欧美黑人激情性久久| 99久久99久久| 欧美一区二区久久精品| 日产精品久久久久久久性色| 精品久久久久久国产牛牛app| 午夜精品久久久久久| 久久99亚洲网美利坚合众国| 久久精品这里只有精99品| 久久狠狠高潮亚洲精品| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久久久人妻一区精品性色av| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲乱码精品久久久久..| 国产福利电影一区二区三区久久久久成人精品综合 | 久久国产V一级毛多内射| 久久久av波多野一区二区| 久久综合色老色| 亚洲国产婷婷香蕉久久久久久 | 久久男人中文字幕资源站| 欧美亚洲色综久久精品国产| 日日狠狠久久偷偷色综合0| 欧美精品一区二区精品久久 | 91亚洲国产成人久久精品网址| 亚洲国产成人精品91久久久 | 91精品国产高清91久久久久久| 青青热久久国产久精品| 久久国产热这里只有精品| 嫩草影院久久国产精品| 久久精品免费观看| 久久久久免费看成人影片| 色综合久久综合中文综合网| 亚洲午夜久久久久妓女影院| 亚洲色欲久久久综合网| 久久夜色精品国产噜噜噜亚洲AV| 久久人人爽爽爽人久久久|