C++ primer plus学习 三:处理数据 wcha_t char16/32_t

程序需要处理的字符集可能无法用一个8位的字节表示,如汉字,一个汉字是16位,也就是两个字节。

#include<iostream>

int main() {

	using namespace std;

	signed char ch;
	ch = '我';
	cout << ch;

}

结果

?

他疑惑了。。。

我们使用另外一种类型:wchar_t(宽字符类型)可以表示扩展字符集。wchar_t是一种整数类型。原书:这种类型与另一种整型(底层(underlying)类型)的长度和符号属性相同。对底层类型的选择取决于实现,因此在一个系统中,他可能是unsigned short,而在另外一个系统中,可能是int。这个我不是很懂啥意思。。

复制于一个帖子下的评论

底层类型就是语言自带的类型,说C语言好了,自带的类型有char,short,int,long,float,double(另外还有对应的unsigned修饰的无符号类型),自带的类型有一个特征,他们的值可以直接存储到cpu寄存器中的,以EAX寄存器为例,char可以存到AL,short可以存到AX,int可以存到EAX,还有的类型比如__int64可以存到RAX。wchar_t在vs2010里面是另外定义的:

  1. #ifndef _WCHAR_T_DEFINED

  2. typedef unsigned short wchar_t;

  3. #define _WCHAR_T_DEFINED

  4. #endif

所以wchar_t的底层类型就是unsigned short

cin和cout将输入和输出看作是char流,因此不适于处理wchar_t类型。iostream头文件提供了作用类似的wcin和wcout,处理wchar_t流,另外可以通过加上前缀L来指示宽字常量和宽字符串。

我以为wchar_t可以存放一个汉字,然后wcout可以输出一个汉字。但是不行

#include<iostream>

int main() {

	using namespace std;

	wchar_t ch =L'我';
	wcout << ch<<endl;
	wchar_t ch0 = L'tahc';
	wcout << ch0;
	wcout << '我';

}

结果啥也没有,但是也没报错

#include<iostream>

int main() {

	using namespace std;

	char16_t ch = u'我';
	cout.put(ch);
	char ch0 = '我';
	cout<<ch0;
}

输出

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值