c++ 字符集总结

做c++2年多了,一直对字符集这样概念有些模糊,却又一直都有所涉及,今天就简单的总结哈,

此问题虽简单但总结哈也能让自己更清晰

1.多字节字符集和Unicode字符集区别
多字节字符集英文一个字符站1位(一个字节),其他语言可能是多个字节表示一个字符,Unicode下
一个字符都是用2个字节表示。
2. 多字节字符与宽字节字符
char叫 多字节字符 ,一个char占一个字节,之所以叫多字节字符是因为它表示一个 时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’中’)用3个char(三个字节)表示,看下面的例子。
void TestChar(){ char ch1 = 's' ; // 正确 cout << "ch1:" << ch1 << endl; char ch2 = '中' ; // 错误,一个char不能完整存放一个汉字信息 cout << "ch2:" << ch2 << endl; char str[ 4 ] = "中" ; //前三个字节存放汉字'中',最后一个字节存放字符串结束符\0 cout << "str:" << str << endl; //char str2[2] = "国"; // 错误:'str2' : array bounds overflow //cout << str2 << endl; }
结果如下:
ch1:s 
ch2: 
str:中

wchar_t被称为 宽字符 ,一个wchar_t占2个字节。之所以叫宽字符是因为所有的字都要用两个字节(即一个wchar_t)来表示,不管是英文还是中文。看下面的例子:
void TestWchar_t(){ wcout .imbue (locale( "chs" )); // 将wcout的本地化语言设置为中文 wchar_t wch1 = L 's' ; // 正确 wcout << "wch1:" << wch1 << endl; wchar_t wch2 = L '中' ; // 正确,一个汉字用一个wchar_t表示 wcout << "wch2:" << wch2 << endl; wchar_t wstr[ 2 ] = L "中" ; // 前两个字节(前一个wchar_t)存放汉字'中',最后两个字节(后一个wchar_t)存放字符串结束符\0 wcout << "wstr:" << wstr << endl; wchar_t wstr2[ 3 ] = L "中国" ; wcout << "wstr2:" << wstr2 << endl;}
13

结果如下:
ch1:s 
ch2:中 
str:中 
str2:中国

2._T 、L、TEXT宏之间关系

在Unicode下_T ,TEXT和L一样,在字符串前面加上L
在多字符下,_T,TEXT同普通字符一样处理

3.一些c++下宏的定义总结
4.strlen、wcslen、sizeof之间的区别
strlen返回的是字节数(对中英文不一致,中文占两个字节,不包括'\0');
wcslen返回的是字符数(对中英文一致);
sizeof返回的是字节数(包含'\0',而'\0'在Unicode下也是占两个字节的)。
注:在Unicode下一个字符是2个字节,在多字节下一个字符就是一个字节

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值