vc中的数据类型
1、CString to char*
//经过类型强制转换,可以将CString类型转换成char*,例如:
CString cStr = "Hello,world!";
char* zStr = (char*)(LPCTSTR)cStr;
// cstring与int转换
int StringToInt(CString source)
{
char *buff = source.GetBuffer(source.GetLength());
int i = atoi(buff);
source.ReleaseBuffer();
return i;
}
//经过类型强制转换,可以将CString类型转换成char*,例如:
CString cStr = "Hello,world!";
char* zStr = (char*)(LPCTSTR)cStr;
// cstring与int转换
int StringToInt(CString source)
{
char *buff = source.GetBuffer(source.GetLength());
int i = atoi(buff);
source.ReleaseBuffer();
return i;
}
2、char* to CString
//char*类型可以直接给CString,完成自动转换,例如:
char* zStr = "Hello,world!";
CString cStr = zStr;
3、CString to LPCSTR
//将CString转换成LPCSTR,需要获得CString的长度CString cStr = _T("Hello,world!");
int nLen = cStr.GetLength();
LPCSTR lpszBuf = cStr.GetBuffer(nLen);
4、CString to LPSTR
//这个和第3个技巧是一样的,例如:
CString cStr = _T("Hello,world!");
int nLen = str.GetLength();
LPSTR lpszBuf = str.GetBuffer(nLen);
//char*类型可以直接给CString,完成自动转换,例如:
char* zStr = "Hello,world!";
CString cStr = zStr;
3、CString to LPCSTR
//将CString转换成LPCSTR,需要获得CString的长度CString cStr = _T("Hello,world!");
int nLen = cStr.GetLength();
LPCSTR lpszBuf = cStr.GetBuffer(nLen);
4、CString to LPSTR
//这个和第3个技巧是一样的,例如:
CString cStr = _T("Hello,world!");
int nLen = str.GetLength();
LPSTR lpszBuf = str.GetBuffer(nLen);
近日从网上以及自己的经验,搜索了一些相关资料。
PCXSTR,如果不是在 Unicode 下,PCXSTR 与 const char* 是相同的;
CString 作为指向字符的非常数指针来直接访问时,请使用 GetBuffer 和 ReleaseBuffer 成员函数。
使用 AllocSysString 和 SetSysString 成员函数来分配和设置用于自动化(以前称为 OLE 自动化)中的 BSTR 对象。
一个 CString 对象可存储多达 INT_MAX (2,147,483,647) 个字符。TCHAR 数据类型用来获取或设置 CString 对象中的单个字符。与字符数组不同,CString 类具有内置内存分配能力。
从 MFC 4.0 版本开始,当复制 CString 对象时,MFC 增加引用计数而不是复制数据。这使得按值传递参数和按值返回 CString 对象更为高效。这些操作将调用复制构造函数,有时甚至不只一次。增加引用计数会减少这些普通操作的系统开销,并且使人更愿意使用 CString。
随着每个副本的销毁,原对象中的引用计数也会相应减少。直到原 CString 对象的引用计数减少到零时才会销毁该对象。
可使用 CString 成员函数 LockBuffer 和 UnlockBuffer 来禁用或启用引用计数。