java和C++的byte,char,string以及涉及到的字符编码集的说明。
第⼀部分涉及到的字符编码集说明
java语言使用的字符码集是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的统⼀的格式来⽐较令⼈舒适。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论