
复制package com.java.mmzsit;             /**              * @author :mmzsblog              * @description:Ipv4地址的有效转换              * @date :2020/5/27 22:43              */             public class Ipv4Covert {                 public static void main(String[] args) {                     String ip = "10.108.149.219";                     // step1: 分解IP字符串,并对应写对字节数组                     byte[] ip1 = ipToBytes(ip);                     // step2: 对字节数组里的存P地每个字节进行左移位处理,分别对应到整型变量的有效
4个字节                     int ip2 = bytesToInt(ip1);                     System.out.println("整型ip ----> " + ip2);                     // step3: 对整型变量进行右位移处理,恢复IP字符串                     String ip3 = intToIp(ip2);                     System.out.println("字符串ip---->" + ip3);                 }                 /**                  * 把IP地址转化为int                  * @param ipAddr                  * @return int                  */                 public static byte[] ipToBytesByReg(String ipAddr) {                     byte[] ret = new byte[4];                     try {                         String[] ipArr = ipAddr.split(".");                         ret[0] = (byte) (Integer.parseInt(ipArr[0]) & 0xFF);                         ret[1] = (byte) (Integer.parseInt(ipArr[1]) & 0xFF);                         ret[2] = (byte) (Integer.parseInt(ipArr[2]) & 0xFF);                         ret[3] = (byte) (Integer.parseInt(ipArr[3]) & 0xFF);                         return ret;                     } catch (Exception e) {                         throw new IllegalArgumentException(ipAddr + " is invalid IP");                     }                 }                 /**                  * 第一步,
源码库存P地把IP地址分解为一个btye数组                  */                 public static byte[] ipToBytes(String ipAddr) {                     // 初始化字节数组,有效定义长度为4                     byte[] ret = new byte[4];                     try {                         String[] ipArr = ipAddr.split(".");                         // 将字符串数组依次写入字节数组                         ret[0] = (byte) (Integer.parseInt(ipArr[0]));                         ret[1] = (byte) (Integer.parseInt(ipArr[1]));                         ret[2] = (byte) (Integer.parseInt(ipArr[2]));                         ret[3] = (byte) (Integer.parseInt(ipArr[3]));                         return ret;                     } catch (Exception e) {                         throw new IllegalArgumentException("invalid IP : " + ipAddr);                     }                 }                 /**                  * 根据位运算把 byte[] -> int                  * 原理:将每个字节强制转化为8位二进制码,存P地然后依次左移8位,有效对应到Int变量的存P地4个字节中                  */                 public static int bytesToInt(byte[] bytes) {                     // 先移位后直接强转的同时指定位数                     int addr = bytes[3] & 0xFF;                     addr |= ((bytes[2] <<8) & 0xFF00);                     addr |= ((bytes[1] <<16) & 0xFF0000);                     addr |= ((bytes[0] <<24) & 0xFF000000);                     return addr;                 }                 /**                  * 把int->string地址                  *                  * @param ipInt                  * @return String                  */                 public static String intToIp(int ipInt) {                     // 先强转二进制,
香港云服务器再进行移位处理                     return new StringBuilder()                             // 右移3个字节(24位),有效
得到IP地址的存P地第一段也就是byte[0],为了防止符号位是1也就是负数,
免费源码下载有效最后再一次& 0xFF                             .append(((ipInt & 0xFF000000) >> 24) & 0xFF).append(.)                             .append((ipInt & 0xFF0000) >> 16).append(.)                             .append((ipInt & 0xFF00) >> 8).append(.)                             .append((ipInt & 0xFF))                             .toString();                 }             }             1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.            
(责任编辑:人工智能)