字符串类型转换

来源:互联网 发布:css3动画和js动画 编辑:程序博客网 时间:2024/05/01 04:51

1. CString和char *转换 CString重载了类型LPCTSTR所以在用到const char *的地方可以直接使用CString如下:

 CString str=”中国人民”

Char *pChar=new Char[100];

Strcpy(pChar,str)//在这里str自动调用operator LPCTSTR()返回m_pData指针,完成操作。

Strcpy(pChar,str.Getbuffer(0))//这种方法也可以

 

2. char *和CString的转换

char pChar[]=”中国人";

CString str;

Str.Format(“%s”, pChar)

 

3.char *和unsigned short之间的转换

char pChar[]=”a中国人”

DWORD dwNum=MultiByteToWideChar(CP_ACP,0,(char *) pChar,-1,NULL,0); //可以得到ANSI字符到unicode字符所需要的空间,得到的空间比实际字符串占用的空间加1,用来装’/0’。

WCHAR *wp=new WCHAR[dwNum];

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

Int wcCount=Wcslen(wp)//结果是4,它不包括那个’/0’。

 

4.unsigned short 和char *之间的转换

WCHAR pW[]=L"1中国人民a";

int b=wcslen(pW)+1;//给字符串最后的0一个字节的空间.

int bb=WideCharToMultiByte(CP_ACP, 0, pW,-1, NULL, 0, NULL, NULL); //计算宽字符转换为char所需要的空间,如果第四个参数指定为-1则自动计算字符串长度,到NULL为止,并且包括NULL。否则以第四个参数指定的个数为准。

Char *pC=new char[bb];

 Bb= WideCharToMultiByte(CP_ACP, 0, pW,-1, pC, bb, NULL, NULL); //应该检查bb如果bb为0则说明函数返回错误。转换完成后新串尾部包括’/0’。

 

5.CString 和 unsigned short 转换

 CString str="a中国人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转换 转换中切不可用str.Format(“%S”,wp).这个除了转换英文和数字对中文不起作用.

CString str;

WCHAR pW[]=L"1中国人a";

LPTSTR p= str.GetBuffer(256);

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

str.ReleaseBuffer();

/*解释一下:GetBuffer(nMax)和ReleaseBuffer(newLen) 当你想直接使用字符串的缓冲区时,也许你不清楚缓冲区的大小是否可以进行正常使用,这时你可以使用GetBuffer(nMax),用nMax分配一个新的大小。当为0时,不进行分配,只是返回指针。操作完成后,为了使各个其它成员函数起作用,请用RealseBuffer(nNewLen)来重新指定长度,并且在nNewLen位置上用NULL结尾。如果不用nNewLen,则默认为-1系统自动测量字符串长度,如果不是NULL结尾的,则用刚才GetBuffer分配的长度。

 

 7._bstr_t和BSTR的关系

#if defined(WIN32) && !defined(OLE2ANSI)

typedef WCHAR OLECHAR;

#else typedef char OLECHAR;

 #endif typedef OLECHAR* BSTR;

实际上BSTR就是直接指向字符串的首地址(双字节或者ANSI字符串)。而BSTR之前的四个字节是该字符串的长度,由编译器生成的代码自动去读这个长度,而不是用"/0"来标识字符串的结束。

 BSTR 不能用new来分配内存的原因就是前四个字节是字符串长度。没办法用new来分配。 BSTR pb=SysAllocaString(L”中国人民”); 而_bstr_t就是对BSTR的封装

 

8._char *和BSTR的转换

char pc[]="中国人a";

 BSTR pBstr=_com_util::

ConvertStringToBSTR(pc);

::SysFreeString(pBstr); //必须使用否则出现内存泄露

pBstr=NULL;

注:使用时必须引用头文件#include如果出现链接错误请添加comsupp.lib或者consuppwd.lib.

BSTR bstrText = _bstr_t("This is a test");//不可以用这种方法,这只是临时变量。

 

9._ BSTR和char *的转换

char *pC=NULL;

BSTR pBstr=::SysAllocaString(L”中国人a”);

pC=_com_util::ConvertBSTRToString(pBstr);

SysFreeString(pBstr);

PBstr=NULL;

Delete[] pC;

PC=NULL;//据说此种方法有内存泄露。说是用sysFreeString也不行 /////////////////////////////////////////////////////////////////////////////////////////////////////////

_bstr_t bstr=pBstr;

char *pP=bstr;

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

strcpy(pC,pP);

delete[] pC.

据说此法是推荐方法。

 

10.BSTR到_bstr_t的转换

BSTR pBstr=::SysAllocString(L"中国人a");

 _bstr_t b_str(pBstr);

::SysFreeString(pBstr);

 

11.wchar*到_bstr_t的转换

WCHAR pC[]=L"支你";

_bstr_t b_str(pC);

 

12.char*到_bstr_t的转换

char pC[]="支你";

 _bstr_t b_str(pC);

 

 13._bstr_t到char*的转换

_bstr_t bstr("人民万岁12");

 char *pC=bstr;

int a=strlen(pC);

char *pP=new char[a];

strcpy(pP,pC);

delete[] pP;

 

13. _bstr_t到char*的转换

_bstr_t bstr("人民万岁12");

char *pC=bstr;

 int a=strlen(pC);

char *pP=new char[a];

strcpy(pP,pC);

 delete[] pP;

 

 14. _bstr_t到CString的转换

CString str;

_bstr_t bstr;

str=(char *)bstr;

 

15. CString到_bstr_t的转换

CString str="中国人a";

_bstr_t bstr;

 bstr=(LPCTSTR)str;

 

16. CString到BSTR的转换

CString str="中国人a";

 BSTR bstr=str.AllocSysString();

::SysFreeString(bstr);

 

17. BSTR到CString的转换

 CString str;

BSTR bstr=::SysAllocString(L”中国人a”);

str=bstr;

 ::SysFreeString(bstr);

 

18. CComBSTR到BSTR的转换

CComBSTR combstr(10);

 combstr=L"中国人a";

BSTR bstr=combstr.Copy();

::SysFreeString(bstr);

bstr=NULL;

19. BSTR到CComBSTR的转换

BSTR bstr=::SysAllocString(L"中国人a");

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

::SysFreeString(bstr);

bstr=NULL;

原创粉丝点击