c++學習之wchar_t字符類型


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 }

終端結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM