[Java] Java字符ip地址和数字ip地址之间的相互转换 →→→→→进入此内容的聊天室

来自 , 2019-05-11, 写在 Java, 查看 107 次.
URL http://www.code666.cn/view/f2876df2
  1. package com.hxhk.cc.util;
  2.  
  3. import java.util.regex.Matcher;
  4. import java.util.regex.Pattern;
  5.  
  6. public class IPAddressFormatter {
  7.  
  8.         private static final long serialVersionUID = 1364280016493483133L;
  9.        
  10.         private final static int Num = 32;
  11.  
  12.         /**
  13.          * 判断点分十进制IP地址是否正确
  14.          * @param str
  15.          * @return
  16.          */
  17.         public static boolean isIP(String str){
  18.                 Pattern p= Pattern.compile("^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}$");
  19.                 Matcher m =p.matcher(str);
  20.                 return m.matches();
  21.         }
  22.        
  23.         /**
  24.          * 将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理
  25.          *
  26.          * @param strIP
  27.          * @return
  28.          */
  29.         public static long ipToLong(String strIP) {
  30.                 long[] ip = new long[4];
  31.                 int position1 = strIP.indexOf(".");
  32.                 int position2 = strIP.indexOf(".", position1 + 1);
  33.                 int position3 = strIP.indexOf(".", position2 + 1);
  34.                 ip[0] = Long.parseLong(strIP.substring(0, position1));
  35.                 ip[1] = Long.parseLong(strIP.substring(position1 + 1, position2));
  36.                 ip[2] = Long.parseLong(strIP.substring(position2 + 1, position3));
  37.                 ip[3] = Long.parseLong(strIP.substring(position3 + 1));
  38.                 long value = (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
  39.                 return value; // ip1*256*256*256+ip2*256*256+ip3*256+ip4
  40.         }
  41.        
  42.         /**
  43.          * 将10进制整数形式转换成127.0.0.1形式的IP地址
  44.          * @param longIP
  45.          * @return
  46.          */
  47.         public static String longToIP(long longIP) {
  48.                 StringBuffer sb = new StringBuffer("");
  49.                 sb.append(String.valueOf(longIP >>> 24));// 直接右移24位
  50.                 sb.append(".");
  51.                 sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16)); // 将高8位置0,然后右移16位
  52.                 sb.append(".");
  53.                 sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));
  54.                 sb.append(".");
  55.                 sb.append(String.valueOf(longIP & 0x000000FF));
  56.                 return sb.toString();
  57.         }
  58.  
  59.  
  60.         /**
  61.          * 根据子网网络位数计算子网掩码(2进制)
  62.          * @param num
  63.          * @return String
  64.          */
  65.         public static String SubNumToBinSubMask(int num) {
  66.                 StringBuffer sb = new StringBuffer();
  67.  
  68.                 int location = 0;
  69.                 for (; num > 0; num--, location++) {
  70.                         sb.append(String.valueOf(1));
  71.                 }
  72.                 for (; location < Num; location++) {
  73.                         sb.append(String.valueOf(0));
  74.                 }
  75.                
  76.                 return sb.toString();
  77.         }
  78.  
  79.  
  80.         /**
  81.          * 根据2进制IP地址得到点分十进制表示IP地址
  82.          * @param ipAddress
  83.          * @return String
  84.          */
  85.         public static String BinIPToLong(String ipAddress) {
  86.                 StringBuffer sb = new StringBuffer();
  87.                 Long ip = Long.parseLong(ipAddress, 2);
  88.                 return longToIP(ip);
  89.         }
  90.        
  91.  
  92.         /**
  93.          * 根据二进制IP地址、子网掩码 获得二进制子网地址
  94.          * @param iplist 二进制IP地址
  95.          * @param sublist 二进制子网掩码
  96.          * @return String 点分十进制子网掩码
  97.          */
  98.         public static String getSubnetAddress(char[] iplist,char[] sublist) {
  99.                 StringBuffer sb = new StringBuffer("");
  100.        
  101.                 int value = 0;
  102.                 int length = (iplist.length>sublist.length)?sublist.length:iplist.length;
  103.                 int i = 0;
  104.                 int j = Math.abs(iplist.length-sublist.length);
  105.                 for (; i < length; i++,j++) {
  106.             value = Integer.parseInt(String.valueOf(iplist[i]))& Integer.parseInt(String.valueOf(sublist[j]));
  107.             sb.append(value);
  108.                 }
  109.                 return BinIPToLong(sb.toString());
  110.         }
  111.        
  112.        
  113.  
  114.         /**
  115.          * 根据IP地址(点分十进制)、子网网络位数获得子网地址
  116.          * @param num
  117.          * @param ipAddress IP地址(点分十进制)
  118.          * @return String 点分十进制子网
  119.          */
  120.         public static String getSubnetAddress(int num,String ipAddress) {
  121.                 String binSubIPAddress = SubNumToBinSubMask(num);
  122.                 String ip = Long.toBinaryString(ipToLong(ipAddress));
  123.                 StringBuilder sb = new StringBuilder(ip);
  124.                 return getSubnetAddress(sb.toString().toCharArray(),binSubIPAddress.toCharArray());
  125.         }
  126.  
  127.         /**
  128.          * 根据IP地址(十进制)、子网网络位数获得子网地址
  129.          * @param num 子网网络位数
  130.          * @param ipAddress IP地址(十进制)
  131.          * @return  String 点分十进制子网
  132.          */
  133.         public static String getSubnetAddress(int num,long ipAddress) {
  134.                 String binSubIPAddress = SubNumToBinSubMask(num);
  135.                 String ip = Long.toBinaryString(ipAddress);
  136.                 StringBuilder sb = new StringBuilder(ip);
  137.                 return getSubnetAddress(sb.toString().toCharArray(),binSubIPAddress.toCharArray());
  138.         }
  139.        
  140.  
  141.         /**
  142.          * 根据子网地址(十进制)、子网网络位数获得网段最后的IP地址
  143.          * @param num
  144.          * @param ip
  145.          * @return  String 点分十进制子网
  146.          */
  147.         public static String getEndSubnetAddress(int num,String ip) {
  148.                 String ipAddress = Long.toBinaryString(ipToLong(ip));
  149.                
  150.                 StringBuilder sb = new StringBuilder();
  151.                 for(int i=0;i<Num-ipAddress.length();i++){
  152.                         sb.append("0");
  153.                 }
  154.                 sb.append(ipAddress);
  155.                 char[] valuelist = sb.toString().toCharArray();
  156.                 for(int k=num;k<Num && k<valuelist.length;k++)
  157.                 {
  158.                         valuelist[k]='1';
  159.                 }
  160.                
  161.                 return BinIPToLong(String.valueOf(valuelist));
  162.         }
  163.  
  164.         /**
  165.          * 根据子网地址(十进制)、子网网络位数获得网段最后的IP地址
  166.          * @param num 子网网络位数
  167.          * @param ip 子网地址(十进制)
  168.          * @return String 点分十进制
  169.          */
  170.         public static String getEndSubnetAddress(int num,long ip) {
  171.                 String ipAddress = Long.toBinaryString(ip);
  172.                 StringBuilder sb = new StringBuilder();
  173.                 for(int i=0;i<Num-ipAddress.length();i++){
  174.                         sb.append("0");
  175.                 }
  176.                 sb.append(ipAddress);
  177.                 char[] valuelist = sb.toString().toCharArray();
  178.                 for(int k=num;k<Num && k<valuelist.length;k++)
  179.                 {
  180.                         valuelist[k]='1';
  181.                 }
  182.                 return BinIPToLong(String.valueOf(valuelist));
  183.         }
  184.  
  185.         public static void main(String[] args) {
  186.         }
  187. }
  188.  
  189. //java/6183

回复 "Java字符ip地址和数字ip地址之间的相互转换"

这儿你可以回复上面这条便签

captcha