本文实例讲述了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程序设计有所帮助。