ip存储
ipv4
ipv4使用long类型进行存储即可
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
| public static long ipToLong(String ipString) throws NumberFormatException { long result = 0; String[] terms = ipString.split("\\."); if (terms.length != 4) { return -1; } result += Long.parseLong(terms[0]) << 24; result += Long.parseLong(terms[1]) << 16; result += Long.parseLong(terms[2]) << 8; result += Long.parseLong(terms[3]); return result; }
public static String longToIp(long ipLong) { return (ipLong >>> 24) + "." + ((ipLong >>> 16) & 0xFF) + "." + ((ipLong >>> 8) & 0xFF) + "." + (ipLong & 0xFF); }
public static void main(String[] args) { long result = ipToLong("255.255.255.255"); System.out.println(result); System.out.println(longToIp(result)); }
|
ipv6
ipv6使用long类型是存储不了的,需要使用BigInteger
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static BigInteger ip6ToNumber(String ipv6Address) throws NumberFormatException { try{ InetAddress inetAddress = InetAddress.getByName(ipv6Address); String hostAddress = inetAddress.getHostAddress();
StringBuilder decimalString = new StringBuilder(); String[] split = hostAddress.split(":"); for(String s : split){ int i = Integer.parseInt(s, 16); decimalString.append(String.format("%05d",i)); }
return new BigInteger(decimalString.toString()); } catch (UnknownHostException exception){ LOGGER.error("ipv6转换失败 {}", ipv6Address, exception); return BigInteger.ZERO; }
}
|