使用UNICODE字符集时候TCHAR和char赋值时的不同

1、关于TCHAR类型查阅MSDN发现

#ifdef UNICODE
 typedef WCHAR TCHAR;
#else
 typedef char TCHAR;
#endif

        上面代码说白了就是:如果程序使用UNICODE字符集,则TCHAR代表WCHAR,否则代表char。由于现在我们编写Windows程序通常都是用UNICODE字符集,所以就姑且把它当成WCHAR类型。

2、关于WCHAR类型查阅MSDN发现

typedef wchar_t WCHAR;

        原来WCHAR类型在MFC中其实就是C++宽字符类型的另一个名字而已。wchar_t的变量在C++中初始化和赋值需要加L。例如,要对wchar_t变量初始化赋值,代码如下所示。

	wchar_t weekDay[8] = {L'日', L'一', L'二', L'三', L'四', L'五', L'六'};	// 和char不同的是每个字符前面要加L,表示为宽字符

        如果要对wchar_t类型字符串赋值当然也需要加L,代码如下所示。

	wchar_t weekDay[] = L"日一二三四五六";	// 字符串数组初始化赋值和char类型也不同,前面需要加L


3、在使用UNICODE字符集的MFC程序中用%c对CString类型进行格式化

	CString strTmp;
	strTmp.Format(_T("星期%c"), weekDay[nWeek]);

        如果weekDay使用char类型,上面代码不会出现编译错误。但是最后得到的只是乱码。_T()想必都已经熟悉了,CString类型默认使用UNICODE字符集。所以如果在MFC使用TCHAR类型,它和char类型在使用上唯一不同的是就是得加L进行初始化和赋值。

原文地址:https://www.cnblogs.com/zcube/p/4194553.html