1. 程式人生 > >使用UNICODE字符集時候TCHAR和char賦值時的不同

使用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進行初始化和賦值。