TCHAR是一种字符串类型,是在以MBCS和UNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符。UNICODE是以两个字节方式存储,ASCII是一个字节的方式存储。
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
所以用MBCS来build时,TCHAR是char,使用UNICODE时,TCHAR是wchar_t.
至于String,CString他们都是一种封装了字串处理的操作!
你可以打开他们的源代码找寻究竟!
CString属于VC(MFC)的类库
string是标准C++的类库
string.h是C的库函数。
TCHAR,char是可以同整型互换的类型。
String,CString代表了一块内存区域。
TCHAR szWindowText[256]=_T(“QQ2006”);
char*、TCHAR转换CString
CString str(***)
// string to char* 的三种方式
//第一种
string b = "hello!";
char a = (char *)b.data(); //或者,const char *a = b.data();
//第二种
string str="gdfd";
char *p= (char *)str.c_str(); //或者,const char *a = b.c_str();
//第三种
string b = "hello,world!";
char p[40];
b.copy(p, 5, 0); // 5代表复制5个字符,0代表复制的起始位置
*(p + 5) = '\0'; //手动加上结束符
//char *转string
char *a = "hello,world!";
string b;
b = a;
//当声明了string类型变量b后,用printf("%s",b);是会出错的,因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。
//string转char[]
//可以根据length()函数得到
string b = "hello,world!";
char p[40];
int a = b.length();
for (int i = 0; i < b.length(); i++)
{
p[i] = b[i];
}
p[a] = '\0';
printf("%s\n", p);
//将CString赋值给THCAR类型,用Istrcpy
TCHAR* CPublic::CString2TCHAR(CString &str)
{
int iLen = str.GetLength();
TCHAR* szRs = new TCHAR[iLen];
lstrcpy(szRs, str.GetBuffer(iLen));
str.ReleaseBuffer();
return szRs;
}
/***********************************************************************
* 描述:将TCHAR* 转换为 char*
***********************************************************************
*/
char* CPublic::THCAR2char(TCHAR* tchStr)
{
int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度
char* chRtn = new char[iLen+1]
wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值
return chRtn;
}