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