關(guān)于String轉(zhuǎn)化為byte數(shù)組后,不進(jìn)行&0xff,打印出的結(jié)果,上圖,為什么是這樣,漢字的一個(gè)字節(jié)前面為什么有那么多的1
11111111111111111111111111000100 ?
11111111111111111111111110111101 ? ?前兩行為“幕”
11111111111111111111111110111111?
11111111111111111111111111001110 ??前兩行為“課”
1000001 ?“A"
1000010 ? "B"
1000011 ?"c"
2015-08-23
你這樣可不好哦。這種情況我們可以查看 Integer.toHexString(int i); 的API文檔:
“The unsigned integer value is the argument plus?2^32 if the argument is negative; otherwise, it is equal to the argument.”
文檔說如果參數(shù)為負(fù),那么無符號(hào)的整數(shù)值為參數(shù)加上 2^32作為參數(shù);否則等于該參數(shù)。
那就簡單了,因?yàn)檫@個(gè)的“慕”“課”2個(gè)字的GBK編碼為 11000100(C4BD)、10111101(BFCE)(http://www.mytju.com/classCode/tools/encode_gb2312.asp查詢),其作為 int 類型參數(shù)時(shí)為負(fù)數(shù),所以實(shí)際參數(shù)為00111100+2^32、01000011+2^32 剛好就是 11111111111111111111111111000100? 和? 11111111111111111111111110111101。而幾乎所有的編碼格式中的字母都是傳承的ASCII中的編碼,即a~z:61~7A、A~Z:41~5A,不存在轉(zhuǎn) int類型為負(fù)的問題。
這些也是我看到你的問題后才去查閱資料了解的,我還是希望大家學(xué)習(xí)編程過程中多一些磨礱淬礪,少一點(diǎn)不求甚解。對(duì)原理的掌握多少,覺頂你以后的高度。
2015-12-16
學(xué)習(xí)了
2015-08-21
我知道了,byte為8位,int為32位,將byte轉(zhuǎn)化為int,也就是相當(dāng)于將byte再增加24位,這24位默認(rèn)為零,漢字對(duì)應(yīng)的因?yàn)榉创a或者什么原因,前面添加的是1,