首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 將整數 IP 地址轉換為字符串的高效實現

     編輯:Java 相關知識

使用位掩碼與移位操作,將 32 位整數表示的 IPv4 地址高效轉換為點分十進制字符串。此方法避免了除法運算,性能優於字符串分割拼接方式。

核心代碼

/**
 * 將 32 位整數 IP 轉換為點分十進制字符串
 * @param ip 32 位整數(大端序,網絡字節序)
 * @return 標準 IPv4 字符串
 */
public static String long2Ip(final long ip) {
    final long[] masks = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 };
    final StringBuilder sb = new StringBuilder();
    
    for (int i = 0; i < masks.length; i++) {
        // 提取字節並右移到最低位
        long octet = (ip & masks[i]) >>> (i * 8);
        // 從高位開始插入,自動處理點號
        sb.insert(0, octet);
        if (i < masks.length - 1) {
            sb.insert(0, '.');
        }
    }
    return sb.toString();
}

算法優勢

  • 零除法運算: 僅使用位與(&)、無符號右移(>>>)、字符串構建
  • 大端序正確: 掩碼順序對應網絡字節序(高位在前)
  • StringBuilder 高效: 避免字符串拼接產生中間對象
  • 無分支預測失敗: 循環固定 4 次,JIT 易優化

對比驗證

// 測試用例
long ipNum = 0xC0A80101L; // 192.168.1.1
System.out.println(long2Ip(ipNum)); // 輸出: 192.168.1.1

// 邊界值測試
System.out.println(long2Ip(0L));           // 0.0.0.0
System.out.println(long2Ip(0xFFFFFFFFL));  // 255.255.255.255

擴展:支援有符號 int 輸入

若數據庫存儲為有符號 INT(如 MySQL INT UNSIGNED 對應 Java long),調用時需轉換:

public static String int2Ip(int ip) {
    return long2Ip(ip & 0xFFFFFFFFL); // 關鍵:無符號擴展
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved