1.CString和char *轉(zhuǎn)換 CString重載了類型LPCTSTR所以在用到const char *的地方可以直接使用CString如下: CString str=”中國(guó)人民” Char Strcpy(pChar,str)//在這里str自動(dòng)調(diào)用operator LPCTSTR()返回m_pData指針,,完成操作,。 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’。 Int wcCount=Wcslen(wp)//結(jié)果是4,,它不包括那個(gè)’\0’,。 4.unsigned short 和char *之間的轉(zhuǎn)換 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)換 LPCTSTR pChar=str; DWORD dwNum=MultiByteToWideChar(CP_ACP,0,(char *) pChar,-1,NULL,0); 6.unsigned short和CString轉(zhuǎn)換 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) 實(shí)際上BSTR就是直接指向字符串的首地址(雙字節(jié)或者ANSI字符串),。 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)換 BSTR bstrText = _bstr_t("This is a test");//不可以用這種方法,,這只是臨時(shí)變量,。 9._ BSTR和char *的轉(zhuǎn)換 char *pC=NULL; PBstr=NULL; PC=NULL;//據(jù)說此種方法有內(nèi)存泄露。說是用sysFreeString也不行 _bstr_t bstr=pBstr; 10.BSTR到_bstr_t的轉(zhuǎn)換 11.wchar*到_bstr_t的轉(zhuǎn)換 12.char*到_bstr_t的轉(zhuǎn)換 13._bstr_t到char*的轉(zhuǎn)換 _bstr_t bstr("人民萬(wàn)歲12"); 13. _bstr_t到char*的轉(zhuǎn)換 _bstr_t bstr("人民萬(wàn)歲12"); 14. _bstr_t到CString的轉(zhuǎn)換 _bstr_t bstr; str=(char *)bstr; 15. CString到_bstr_t的轉(zhuǎn)換 16. CString到BSTR的轉(zhuǎn)換 BSTR bstr=str.AllocSysString(); ::SysFreeString(bstr); 17. BSTR到CString的轉(zhuǎn)換 BSTR bstr=::SysAllocString(L”中國(guó)人a”); 18. CComBSTR到BSTR的轉(zhuǎn)換 19. BSTR到CComBSTR的轉(zhuǎn)換 |
|
來(lái)自: 筱肆 > 《網(wǎng)文收藏》