wchar_t是C/C++的字符類型,一種擴展的存儲方式,主要用在國際化程序的實現中,但它不等同與Unicode編碼;Unicode編碼的字符一般是以wchar_t字符存儲。
char字符類型只有8個位,只能包含256個字符,而像很多外文字符遠超過256個字符,例如:中文、日文、韓文等,這些字符需要占用兩個字節空間,所以c++提出了雙字節字符類型wchar_t(或叫寬字符類型)。
wchar_t寬字符類型定義:
wchar_t name[] = L"content";
注:wchar_t定義的是雙字節類型,需要L告訴編譯器content占用2字節的空間,否則編譯產生類型報錯。
wchar_t寬字符類型輸出:
cout輸出:字節十六進制數據
wcout輸出: 設置本地語言后,正常輸出,未設置則發生流錯誤,需調用wcout.clear()清除錯誤后方能正常輸出
wprintf()輸出:以寬字符形式輸出
wcout、wprintf輸出內容必須使用L 修飾。
wchar_t環境設置:
頭文件:<locale>
setlocale(LC_ALL, "chs"); // 設置為中文格式
示例代碼:
1 #include <iostream> 2 #include <locale> // 本地語言設置頭文件 3 4 using namespace std; 5 6 7 int main(void) 8 { 9 wchar_t chinese[] = L"中國"; // 字符前添加L表示告訴編譯器為字符分配2字節空間 10 11 cout << "chinese[] = L\"中國\"" << endl; 12 13 cout << "設置環境前,cout輸出:" << chinese << endl; 14 cout << "設置環境前,wcout輸出:"; // 沒有輸出,若Chinese內容為字符串,可以正常輸出 15 wcout << chinese; 16 17 /* 18 未設置本地語言之前,wcout直接輸出導致流錯誤, 19 需要先把流錯誤清除,后邊wcout才能正常輸出 20 */ 21 wcout.clear(); 22 wcout << endl; 23 24 // wcout << L"你好" <<endl; // 沒有設置環境前,會發生流錯誤 25 setlocale(LC_ALL, "chs"); // 設置為中文環境 26 27 wcout << L"你好" << endl; 28 29 cout << "設置環境后,cout輸出: "; 30 cout << chinese << endl; 31 cout << "設置環境后,wcout輸出:"; 32 wcout << chinese; 33 cout << endl; 34 cout << "設置環境后,wprintf()輸出:"; 35 wprintf(chinese); 36 cout << endl; 37 38 cout << sizeof(chinese) << endl; 39 return 0; 40 }
終端結果: