Skip to content

Commit

Permalink
新增 IP 地址工具
Browse files Browse the repository at this point in the history
  • Loading branch information
mrzhqiang committed Sep 23, 2022
1 parent bf0bb32 commit 8869e66
Showing 1 changed file with 57 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.github.mrzhqiang.helper.uppc;

/**
* Provides a class with tools for working with IP addresses, in both strings
* and as long integers.
*
* @author Nol888
* @version 0.1
* @since Revision 890
*/
public class IPAddressTool {

/**
* Converts a dotted-quad IP (<code>127.0.0.1</code>) and turns it into a
* long integer IP.
*
* @param dottedQuad The IP address in dotted-quad form.
* @return The IP as a long integer.
* @throws RuntimeException
*/
public static final long dottedQuadToLong(final String dottedQuad) throws RuntimeException {
final String[] quads = dottedQuad.split("\\.");
if (quads.length != 4) {
throw new RuntimeException("Invalid IP Address format.");
}
long ipAddress = 0;
for (int i = 0; i < 4; i++) {
ipAddress += (long) (Integer.parseInt(quads[i]) % 256) * (long) Math.pow(256, (double) (4 - i));
}
return ipAddress;
}

/**
* Converts a long integer IP into a dotted-quad IP.
*
* @param longIP The IP as a long integer.
* @return The IP as a dotted-quad string.
* @throws RuntimeException
*/
public static final String longToDottedQuad(long longIP) throws RuntimeException {
StringBuilder ipAddress = new StringBuilder();

for (int i = 0; i < 4; i++) {
int quad = (int) (longIP / (long) Math.pow(256, (double) (4 - i)));
longIP -= (long) quad * (long) Math.pow(256, (double) (4 - i));
if (i > 0) {
ipAddress.append(".");
}
if (quad > 255) {
throw new RuntimeException("Invalid long IP address.");
}
ipAddress.append(quad);
}

return ipAddress.toString();
}
}

0 comments on commit 8869e66

Please sign in to comment.