(一)“字节”的定义
字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。
(二)“字符”的定义
字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
(三)“字节”与“字符”
它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:
①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。
②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。
④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
⑤UTF-32编码中,世界上任何字符的存储都需要4个字节
摘评论:针对UTF-8,中国的汉字多达10多万,常用的汉字3500左右[08年统计],如果用3个字节来表示,一共只有2^16(65535)种可能,不足以表示10多万的汉字。所以中日韩的超大字符集是采用的4个字节来表示的,多达6万多个。但是平时使用超大字符集的概率0.01%都不到。所以我们一般认为日常的中文在UTF-8中占三个字节,但实际上也有4个字节的。
(转账:https://blog.csdn.net/andyzhaojianhui/article/details/53785656)
------------------------------------------------------------------------------------------------------------------------
1:char“字符”,byte“字节”,bit“位”;
2:1 byte = 8 bit;
3:char 在Java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。
public class Test {
public static void main(String[] args) {
String str = "帅";
char x = '帅';
byte[] bytes1 = null;
byte[] bytes2 = null;
try {
//utf-8 编码
bytes1 = str.getBytes("utf-8");
//unicode编码
bytes2 = charToByte(x);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println("bytes1大小:" + bytes1.length);
System.out.println("bytes2大小:" + bytes2.length);
}
public static byte[] charToByte(char c) {
byte[] b = new byte[2];
b[0] = (byte) ((c & 0xFF00) >> 8);
b[1] = (byte) (c & 0xFF);
return b;
}
}
bytes1大小:3
bytes2大小:2
java是用unicode来表示字符,“帅”这个中文字符的unicode就是2个字节。
String.getBytes(encoding)方法是获取指定编码的byte数组表示,
通常gbk/gb2312是2个字节,utf-8是3个字节。
如果不指定encoding则取系统默认的encoding。
------------------------------------------------------------------------------------------------------------------------
十六进制数
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
(A,B,C,D,E,F 对应 10,11,12,13,14,15)
计数到F后,再增加1个,就进位。
十六进制数是计算机常用的一种计数方法,它可以弥补二进制数书写位数过长的不足,也用于电视机中。
十六进制数的表示方式为0x开头。
示例:0x6AF = 1711;从右向左开始计算,第一个字符数乘以16的零次方,加上第二个字符数乘以16的一次方,再加上第三个字符数乘以16的二次方。以此类推。
15 * 1 + 10 * 16 + 6 * 256 = 1711