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;