java和C++的byte,char,string以及涉及到的字符编码集的说明。

第一部分 涉及到的字符编码集说明

ASCII编码

由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。

Unicode编码

Unicode把所有语言都统一到一套编码里。Unicode标准最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

UTF-8编码

统一成Unicode编码,乱码问题从此消失。但是,如果文本全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
因此,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

GBK编码

GBK全称《汉字内码扩展规范》,GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
GBK分两段,ASCII段和中文段。ASCII段使用单字节,和ASCII编码保持一致;中文(及特殊符号)段使用双字节编码。在双字节段中,第一字节的范围是81–FE(也就是不含80和FF),第二字节的一部分领域在40–7E,其他领域在80–FE2。也就是说,在GBK编码中,中文有两个字节,首字节范围81-FE,尾字节范围40-7E。

第二部分 java和c++的字节,字符,字符串
在java里:
类型名符号类型字节大小编码方式
byte有符号1ASCII
char无符号2Unicode
String--Unicode

byte 是字节数据类型 ,是有符号型的,占1 个字节,大小范围为-128—127 。
char 是字符数据类型 ,是无符号型的,占2字节,大小范围 是0—65535 。
String是一个类,可以存储一个或者多个char。

在C++里(其中一种的情况,c++会随着机器环境改变,很烦)
类型名符号类型字节大小编码方式
char有符号(可能跟环境有关)1常规ASCII,汉字就GBK(跟环境有关)
wchar_t有符号(可能跟环境有关)2Unicode
string--常规ASCII,汉字就GBK(跟环境有关)
wstring--Unicode

你可以用string存中文串,但是一个中文会占两个字节,使用的是GBK的编码方式。用wstring,应该就是unicode的编码方式了。
你用汉字给char赋值也不会报错,但是汉字的字节会被截断,只留下一个字节,结果可能跟你要的不一样,具体还是看机器。

byte不是基础数据类型,一般是typedef unsigned char byte。
char是基础符号类型,8位,1个字节(和java的byte一样)。
wchar_t是基础符号类型,16位,2个字节(和java的char一样)。
string使用的是char类型,char组成的字符串。
wstring,使用的是wchar_t类型,w_char组成的字符串。

小结

C++的相关内容版本太杂太多,还是Java的统一的格式来比较令人舒适。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值