private static final int IPV6Length = 8; // IPV6地址的分段 private static final int IPV4Length = 4; // IPV6地址分段 private static final int IPV4ParmLength = 2; // 一个IPV4分段占的长度 private static final int IPV6ParmLength = 4; // 一个IPV6分段占的长
/** * IPV6、IPV4转化为十六进制串 * * @param ipAddress * @return */ private static String buildKey(String ipAddress) { String Key = ""; // ipv4标识 。判断是否是ipv4地址 int dotFlag = ipAddress.indexOf("."); // ipv6标识 。判断是否是ipv6地址 int colonFlag = ipAddress.indexOf(":"); // ipv6标识 。判断是否是简写的ipv6地址 int dColonFlag = ipAddress.indexOf("::"); // 将v6或v4的分隔符用&代替 ipAddress = ipAddress.replace(".", "&"); ipAddress = ipAddress.replace(":", "&"); // ipv4 address。将ipv4地址转换成16进制的形式 if (dotFlag != -1 && colonFlag == -1) { String[] arr = ipAddress.split("&"); // 1、 ipv4转ipv6,前4组数补0或f for (int i = 0; i < IPV6Length - IPV4ParmLength; i++) { // 根据v4转v6的形式,除第4组数补ffff外,前3组数补0000 if (i == IPV6Length - IPV4ParmLength - 1) { Key += "ffff"; } else { Key += "0000"; } } // 2、将ipv4地址转成16进制 for (int j = 0; j < IPV4Length; j++) { // 1)将每组ipv4地址转换成16进制 arr[j] = Integer.toHexString(Integer.parseInt(arr[j])); // 2) 位数不足补0,ipv4地址中一组可转换成一个十六进制,两组数即可标识i