欢迎来到山村网

JAVA中IP和整数相互转化的方法

2019-03-02 13:29:56浏览:551 来源:山村网   
核心摘要:  本文实例讲述了JAVA中IP和整数相互转化的方法。分享给大家供大家参考。具体分析如下:  一、基本知识点  IP整数:  把

  本文实例讲述了JAVA中IP和整数相互转化的方法。分享给大家供大家参考。具体分析如下:

  一、基本知识点

  IP ——> 整数:

  把IP地址转化为字节数组

  通过左移位(<<)、与(&)、或(|)这些操作转为int

  整数 ——> IP:

  将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。

  将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。

  将整数值进行右移位操作(>>>),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。

  将整数值进行与操作符(&)0xFF,得到的数字即为第四段IP。

  二、java代码示例(IPv4Util.java)

  ?

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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 package michael.utils; import java.net.InetAddress; public class IPv4Util { private final static int INADDRSZ = 4; public static byte[] ipToBytesByInet(String ipAddr) { try { return InetAddress.getByName(ipAddr).getAddress(); } catch (Exception e) { throw new IllegalArgumentException(ipAddr + " is invalid IP"); } }JTA实践:Spring+ATOMIKOS 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"); } } public static String bytesToIp(byte[] bytes) { return new StringBuffer().append(bytes[0] & 0xFF).append('.').append( bytes[1] & 0xFF).append('.').append(bytes[2] & 0xFF) .append('.').append(bytes[3] & 0xFF).toString(); } 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; } public static int ipToInt(String ipAddr) { try { return bytesToInt(ipToBytesByInet(ipAddr)); } catch (Exception e) { throw new IllegalArgumentException(ipAddr + " is invalid IP"); } } public static byte[] intToBytes(int ipInt) { byte[] ipAddr = new byte[INADDRSZ]; ipAddr[0] = (byte) ((ipInt >>> 24) & 0xFF); ipAddr[1] = (byte) ((ipInt >>> 16) & 0xFF); ipAddr[2] = (byte) ((ipInt >>> 8) & 0xFF); ipAddr[3] = (byte) (ipInt & 0xFF); return ipAddr; } public static String intToIp(int ipInt) { return new StringBuilder().append(((ipInt >> 24) & 0xff)).append('.') .append((ipInt >> 16) & 0xff).append('.').append( (ipInt >> 8) & 0xff).append('.').append((ipInt & 0xff)) .toString(); } public static int[] getIPIntScope(String ipAndMask) { String[] ipArr = ipAndMask.split("/"); if (ipArr.length != 2) { throw new IllegalArgumentException("invalid ipAndMask with: " + ipAndMask); } int netMask = Integer.valueOf(ipArr[1].trim()); if (netMask < 0 || netMask > 31) { throw new IllegalArgumentException("invalid ipAndMask with: " + ipAndMask); } int ipInt = IPv4Util.ipToInt(ipArr[0]); int netIP = ipInt & (0xFFFFFFFF << (32 - netMask)); int hostScope = (0xFFFFFFFF >>> netMask); return new int[] { netIP, netIP + hostScope }; } public static String[] getIPAddrScope(String ipAndMask) { int[] ipIntArr = IPv4Util.getIPIntScope(ipAndMask); return new String[] { IPv4Util.intToIp(ipIntArr[0]), IPv4Util.intToIp(ipIntArr[0]) }; } public static int[] getIPIntScope(String ipAddr, String mask) { int ipInt; int netMaskInt = 0, ipcount = 0; try { ipInt = IPv4Util.ipToInt(ipAddr); if (null == mask || "".equals(mask)) { return new int[] { ipInt, ipInt }; } netMaskInt = IPv4Util.ipToInt(mask); ipcount = IPv4Util.ipToInt("255.255.255.255") - netMaskInt; int netIP = ipInt & netMaskInt; int hostScope = netIP + ipcount; return new int[] { netIP, hostScope }; } catch (Exception e) { throw new IllegalArgumentException("invalid ip scope express ip:" + ipAddr + " mask:" + mask); } } public static String[] getIPStrScope(String ipAddr, String mask) { int[] ipIntArr = IPv4Util.getIPIntScope(ipAddr, mask); return new String[] { IPv4Util.intToIp(ipIntArr[0]), IPv4Util.intToIp(ipIntArr[0]) }; } public static void main(String[] args) throws Exception { String ipAddr = "192.168.8.1"; byte[] bytearr = IPv4Util.ipToBytesByInet(ipAddr); StringBuffer byteStr = new StringBuffer(); for (byte b : bytearr) { if (byteStr.length() == 0) { byteStr.append(b); } else { byteStr.append("," + b); } } System.out.println("IP: " + ipAddr + " ByInet --> byte[]: [ " + byteStr + " ]"); bytearr = IPv4Util.ipToBytesByReg(ipAddr); byteStr = new StringBuffer(); for (byte b : bytearr) { if (byteStr.length() == 0) { byteStr.append(b); } else { byteStr.append("," + b); } } System.out.println("IP: " + ipAddr + " ByReg --> byte[]: [ " + byteStr + " ]"); System.out.println("byte[]: " + byteStr + " --> IP: " + IPv4Util.bytesToIp(bytearr)); int ipInt = IPv4Util.ipToInt(ipAddr); System.out.println("IP: " + ipAddr + " --> int: " + ipInt); System.out.println("int: " + ipInt + " --> IP: " + IPv4Util.intToIp(ipInt)); String ipAndMask = "192.168.1.1/24"; int[] ipscope = IPv4Util.getIPIntScope(ipAndMask); System.out.println(ipAndMask + " --> int地址段:[ " + ipscope[0] + "," + ipscope[1] + " ]"); System.out.println(ipAndMask + " --> IP 地址段:[ " + IPv4Util.intToIp(ipscope[0]) + "," + IPv4Util.intToIp(ipscope[1]) + " ]"); String ipAddr1 = "192.168.1.1", ipMask1 = "255.255.255.0"; int[] ipscope1 = IPv4Util.getIPIntScope(ipAddr1, ipMask1); System.out.println(ipAddr1 + " , " + ipMask1 + " --> int地址段 :[ " + ipscope1[0] + "," + ipscope1[1] + " ]"); System.out.println(ipAddr1 + " , " + ipMask1 + " --> IP地址段 :[ " + IPv4Util.intToIp(ipscope1[0]) + "," + IPv4Util.intToIp(ipscope1[1]) + " ]"); } }

  希望本文所述对大家的java程序设计有所帮助。

(责任编辑:豆豆)
下一篇:

java生成随机数的方法

上一篇:

Java基于socket服务实现UDP协议的方法

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com