(一)“字節”的定義
字節(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