久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VC中的字符串類型轉(zhuǎn)換

 筱肆 2014-03-13

1.CString和char *轉(zhuǎn)換

CString重載了類型LPCTSTR所以在用到const char *的地方可以直接使用CString如下:

CString str=”中國(guó)人民”

Char  *pChar=new Char[100];

Strcpy(pChar,str)//在這里str自動(dòng)調(diào)用operator LPCTSTR()返回m_pData指針,,完成操作,。

Strcpy(pChar,str.Getbuffer(0))//這種方法也可以

 

2.char *和CString的轉(zhuǎn)換

char pChar[]=”中國(guó)人”

CString str;

Str.Format(“%s”, pChar)

 

3.char *和unsigned short之間的轉(zhuǎn)換

char pChar[]=”a中國(guó)人”

DWORD dwNum=MultiByteToWideChar(CP_ACP,0,(char *) pChar,-1,NULL,0);

//可以得到ANSI字符到unicode字符所需要的空間,得到的空間比實(shí)際字符串占用的空

間加1,,用來(lái)裝’\0’。

WCHAR *wp=new WCHAR[dwNum];

MultiByteToWideChar(CP_ACP,0,(char *)cp,-1,wp,dwNum);

Int wcCount=Wcslen(wp)//結(jié)果是4,,它不包括那個(gè)’\0’,。

 

4.unsigned short 和char *之間的轉(zhuǎn)換

WCHAR pW[]=L"1中國(guó)人民a";

int b=wcslen(pW)+1;//給字符串最后的0一個(gè)字節(jié)的空間.

int bb=WideCharToMultiByte(CP_ACP, 0, pW,-1, NULL, 0, NULL, NULL); 

//計(jì)算寬字符轉(zhuǎn)換為char所需要的空間,如果第四個(gè)參數(shù)指定為-1則自動(dòng)計(jì)算字符串長(zhǎng)度,,到NULL為止,,并且包括NULL。否則以第四個(gè)參數(shù)指定的個(gè)數(shù)為準(zhǔn),。

Char *pC=new char[bb];

Bb= WideCharToMultiByte(CP_ACP, 0, pW,-1, pC, bb, NULL, NULL); 

//應(yīng)該檢查bb如果bb為0則說明函數(shù)返回錯(cuò)誤,。轉(zhuǎn)換完成后新串尾部包括’\0’。

 

5.CString 和 unsigned short 轉(zhuǎn)換

CString str="a中國(guó)人1";

LPCTSTR pChar=str;

DWORD dwNum=MultiByteToWideChar(CP_ACP,0,(char *) pChar,-1,NULL,0);

WCHAR *wp=new WCHAR[dwNum];

MultiByteToWideChar(CP_ACP,0,(char *)pChar,-1,wp,dwNum);

delete[] wp;

 

6.unsigned short和CString轉(zhuǎn)換

轉(zhuǎn)換中切不可用str.Format(“%S”,wp).這個(gè)除了轉(zhuǎn)換英文和數(shù)字對(duì)中文不起作用.

CString str;

WCHAR pW[]=L"1中國(guó)人a";

LPTSTR p= str.GetBuffer(256);

int bb=WideCharToMultiByte(CP_ACP, 0, pW,-1,p, 256, NULL, NULL);

str.ReleaseBuffer();

*解釋一下:GetBuffer(nMax)和ReleaseBuffer(newLen)

當(dāng)你想直接使用字符串的緩沖區(qū)時(shí),,也許你不清楚緩沖區(qū)的大小是否可以進(jìn)行正常使用,,這時(shí)你可以使用GetBuffer(nMax),用nMax分配一個(gè)新的大小。當(dāng)為0時(shí),,不進(jìn)行分配,,只是返回指針。

操作完成后,,為了使各個(gè)其它成員函數(shù)起作用,,請(qǐng)用RealseBuffer(nNewLen)來(lái)重新指定長(zhǎng)度,并且在nNewLen位置上用NULL結(jié)尾,。如果不用nNewLen,則默認(rèn)為-1系統(tǒng)自動(dòng)測(cè)量字符串長(zhǎng)度,,如果不是NULL結(jié)尾的,則用剛才GetBuffer分配的長(zhǎng)度,。

 

7._bstr_t和BSTR的關(guān)系

#if defined(WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;
#else
typedef char OLECHAR;
#endif
typedef OLECHAR* BSTR;

實(shí)際上BSTR就是直接指向字符串的首地址(雙字節(jié)或者ANSI字符串),。
而BSTR之前的四個(gè)字節(jié)是該字符串的長(zhǎng)度,由編譯器生成的代碼自動(dòng)去讀這個(gè)長(zhǎng)度,,而不是用"\0"來(lái)標(biāo)識(shí)字符串的結(jié)束,。

BSTR 不能用new來(lái)分配內(nèi)存的原因就是前四個(gè)字節(jié)是字符串長(zhǎng)度。沒辦法用new來(lái)分配,。

BSTR pb=SysAllocaString(L”中國(guó)人民”);

而_bstr_t就是對(duì)BSTR的封裝

 

8._char *和BSTR的轉(zhuǎn)換

char pc[]="中國(guó)人a";

BSTR pBstr=_com_util::ConvertStringToBSTR(pc);

::SysFreeString(pBstr); //必須使用否則出現(xiàn)內(nèi)存泄露

pBstr=NULL;

注:使用時(shí)必須引用頭文件#include<comutil.h>如果出現(xiàn)鏈接錯(cuò)誤請(qǐng)?zhí)砑觕omsupp.lib或者consuppwd.lib.

BSTR bstrText = _bstr_t("This is a test");//不可以用這種方法,,這只是臨時(shí)變量,。

 

9._ BSTR和char *的轉(zhuǎn)換

char *pC=NULL;

BSTR pBstr=::SysAllocaString(L”中國(guó)人a”);

pC=_com_util::ConvertBSTRToString(pBstr);

SysFreeString(pBstr);

PBstr=NULL;

Delete[] pC;

PC=NULL;//據(jù)說此種方法有內(nèi)存泄露。說是用sysFreeString也不行

   //////////////////////////////////////////////////////////////////////////////////////////////////

_bstr_t bstr=pBstr;

char *pP=bstr;

char *pC=new char[strlen(pP)];

strcpy(pC,pP); delete[] pC.據(jù)說此法是推薦方法,。

   //////////////////////////////////////////////////////////////////////////////////////////////////

 

10.BSTR到_bstr_t的轉(zhuǎn)換

BSTR pBstr=::SysAllocString(L"中國(guó)人a");

_bstr_t b_str(pBstr);

::SysFreeString(pBstr);

11.wchar*到_bstr_t的轉(zhuǎn)換

WCHAR pC[]=L"支你";

_bstr_t b_str(pC);

 

12.char*到_bstr_t的轉(zhuǎn)換

char pC[]="支你";

_bstr_t b_str(pC);

 

13._bstr_t到char*的轉(zhuǎn)換

_bstr_t bstr("人民萬(wàn)歲12");

char *pC=bstr;

int a=strlen(pC);

char *pP=new char[a];

strcpy(pP,pC);

delete[] pP;

 

13. _bstr_t到char*的轉(zhuǎn)換

_bstr_t bstr("人民萬(wàn)歲12");

char *pC=bstr;

int a=strlen(pC);

char *pP=new char[a];

strcpy(pP,pC);

delete[] pP;

 

14. _bstr_t到CString的轉(zhuǎn)換

CString str;

_bstr_t bstr;

str=(char *)bstr;

 

15. CString到_bstr_t的轉(zhuǎn)換

CString str="中國(guó)人a";

_bstr_t bstr;

bstr=(LPCTSTR)str;

 

16. CString到BSTR的轉(zhuǎn)換

CString str="中國(guó)人a";

BSTR bstr=str.AllocSysString();

::SysFreeString(bstr);

 

17. BSTR到CString的轉(zhuǎn)換

CString str;

BSTR bstr=::SysAllocString(L”中國(guó)人a”);

str=bstr;

::SysFreeString(bstr);

 

18. CComBSTR到BSTR的轉(zhuǎn)換

CComBSTR combstr(10);

combstr=L"中國(guó)人a";

BSTR bstr=combstr.Copy();

::SysFreeString(bstr);

bstr=NULL;

 

19. BSTR到CComBSTR的轉(zhuǎn)換

BSTR bstr=::SysAllocString(L"中國(guó)人a");

CComBSTR combstr;//combstr(bstr);//

combstr=bstr;

::SysFreeString(bstr);

bstr=NULL;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多