一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java輸出通過InetAddress獲得的IP地址數組詳細解析

Java輸出通過InetAddress獲得的IP地址數組詳細解析

2019-10-14 14:06java技術網 Java教程

由于byte被認為是unsigned byte,所以最高位的1將會被解釋為符號位,另外Java中存儲是按照補碼存儲,所以1000 0111會被認為是補碼形式,轉換成原碼便是1111 0001,轉換成十進制數便是-121

使用 InetAddress 獲取 IP 地址會得到一個 byte 數組
如果你直接輸出這個數組,你會發現 IP 地址中的某些位變成了負數
比如 61.135.169.105 會輸出成 61.-121.-87.105
仔細看一看,會發現 135 + 121 = 256,169 + 87 = 256


-_-! 怎么個情況!

我首先想到的是 byte 類型向 int 類型轉換過程中出現了問題,后來發現,實際不然

因為 Java 中沒有 unsigned 類型,所以byte、short、int、long 都是有符號的,所以根本就不存在隱式類型轉換出錯的問題。

既然說到了 Java 沒有 unsigned 類型,那么 byte 是 8 位,所以表示范圍為 -127 - 128,而 IP 一個段的表示范圍為 0 - 255,終于找到了不對勁的地方了

IP 的一個段是一個 unsigned byte,這樣一個 unsigned byte 存入一個 signed byte 中當然會導致一些問題出現

分析一下:
35 的二進制編碼為 1000 0111,最高位置為 1

由于 byte 被認為是 unsigned byte,所以最高位的 1 將會被解釋為符號位,另外 Java 中存儲是按照補碼存儲,所以 1000 0111 會被認為是補碼形式,轉換成原碼便是 1111 0001,轉換成十進制數便是 -121。

再看,65 的二進制編碼為 0100 0001,由于小于 128,所以沒有將最高位置 1,0100 0001 的補碼還是 0100 0001,所以 65 不變。

分析這么多,這個問題的解決方法其實很簡單,將 byte 變量與 0xFF 按位與即可,過程中 byte 會隱式類型轉換為 int,當與 0xFF 按位與的時候,會將除了低 8 位的其他位全部置 0,這樣一來便將符號擴展的那些高位清除掉了。

最后附上一個自己寫的通用函數,用來將整型變量的二進制編碼輸出

復制代碼代碼如下:

/**
 * 將整型變量的二進制編碼形式輸出
 * @param n 整型變量
 * @param size 整型的二進制長度,可使用類似 Short.SIZE 獲得
 * @return 二進制編碼字符串
 */
public static String printBinary(long n, int size) {
 StringBuilder sb = new StringBuilder();
 for (int i = size - 1; i >= 0; i--) {
  sb.append(n >>> i & 0x01);
  if (i % 4 == 0) {
   sb.append(" ");
  }
 }
 return sb.toString();
}
 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: aⅴ视频在线免播放观看 | 加勒比一本大道在线 | chinese帅男gay野外性 | 成人动漫影院 | 国产亚洲女人久久久久久 | 2021国产精品视频 | 精品午夜久久福利大片免费 | 国产精品青青青高清在线密亚 | 天天天天天天天操 | 亚洲国产欧美另类 | 亚洲日本中文字幕在线2022 | 免费人成黄页在线观看69 | 久久永久影院免费 | 国产99精品免费视频看6 | 青草免费在线观看 | 日本丰满www色 | 久久久久久久国产精品视频 | 精品一久久香蕉国产线看观 | 久久re亚洲在线视频 | 欧美成人momandson | 国产老肥熟xxxx | 男人视频网 | 男gay网站视频免费观看 | 日韩亚洲欧美综合一区二区三区 | eeuss免费快捷 | 国产精品美女久久久久网站 | cao逼视频 | 俄罗斯激情性孕妇孕交大全 | 女人张开腿 让男人桶个爽 免费观看 | 久久青青草原综合伊人 | 四虎影院的网址 | www.99精品视频在线播放 | 无敌在线视频观看免费 | 婷综合 | 国产精品免费久久久久影院小说 | 3x免费高清视频 | gay男男白袜chinese | 久草在线福利资站免费视频 | 国产极品精频在线观看 | 成人永久免费福利视频网站 | dasd817黑人在线播放 |