JAVA实现IP地址与整数的互转

需积分: 10 3 下载量 27 浏览量 更新于2024-09-15 收藏 45KB DOC 举报
"JAVA中IP和整数相互转化的实现主要涉及将IP地址字符串转换为整数,以及将整数转换回IP地址字符串的过程。这个过程通常在处理网络数据时非常有用,例如在网络编程或者IP地址的存储和比较中。" 在Java中,IP地址通常以点分十进制的形式表示,例如“192.168.1.1”。这种形式的IP地址可以转换为一个32位的整数,方便计算和存储。以下是IP地址与整数相互转化的基本步骤: 1. IP地址到整数的转换: - 首先,将IP地址字符串分割成四个部分,每个部分代表一个八位的字节。 - 将每个部分转换为整数,并且与0xFF进行按位与操作,确保结果在0-255之间。 - 使用左移位操作(<<)将这四个字节拼接起来形成一个32位的整数。例如,第一部分左移24位,第二部分左移16位,第三部分左移8位,第四部分不移动。 2. 整数到IP地址的转换: - 反向过程,将32位整数拆分成四个8位的部分。 - 使用右移位操作(>>>)逐个提取出这四个部分。每次右移24、16、8和0位,然后与0xFF进行按位与操作,得到对应的八位字节。 - 将这四个字节组合成一个IP地址字符串,每个字节之间用点号(.)分隔。 以下是一个简单的Java代码示例,展示了如何进行这种转换: ```java public class IPv4Util { private final static int INADDRSZ = 4; / * 把IP地址转化为字节数组 * @param ipAddr * @return byte[] */ public static byte[] ipToBytesByInet(String ipAddr) { try { return InetAddress.getByName(ipAddr).getAddress(); } catch (Exception e) { throw new IllegalArgumentException(ipAddr + " is invalid IP"); } } / * 把IP地址转化为int * @param ipAddr * @return int */ public static int ipToIntByReg(String ipAddr) { int result = 0; String[] ipArr = ipAddr.split("\\."); for (int i = 0; i < ipArr.length; i++) { result |= (Integer.parseInt(ipArr[i]) & 0xFF) << (i * 8); } return result; } / * 把int转化为IP地址 * @param num * @return String */ public static String intToIp(int num) { return ((num >> 24) & 0xFF) + "." + ((num >> 16) & 0xFF) + "." + ((num >> 8) & 0xFF) + "." + (num & 0xFF); } } ``` 在这个示例中,`ipToIntByReg`方法用于将IP地址转换为整数,而`intToIp`方法则负责将整数还原为IP地址字符串。`ipToBytesByInet`方法则利用Java内置的`InetAddress`类来完成IP地址到字节数组的转换,这是另一种实现方式。 了解并熟练掌握IP地址与整数之间的转换对于进行网络编程至关重要,特别是在处理网络协议如TCP/IP时,这些基础操作是不可或缺的。