从127.0.0.1到2130706433,再回来
使用标准的Java库,从IPV4地址( "127.0.0.1" )的虚线string表示到等效整数表示( 2130706433 )的最快方法是什么? 
 相应地,反转所述操作的最快方法是 – 从整数2130706433到string表示"127.0.0.1" ? 
string到int:
 int pack(byte[] bytes) { int val = 0; for (int i = 0; i < bytes.length; i++) { val <<= 8; val |= bytes[i] & 0xff; } return val; } pack(InetAddress.getByName(dottedString).getAddress()); 
诠释为string:
 byte[] unpack(int bytes) { return new byte[] { (byte)((bytes >>> 24) & 0xff), (byte)((bytes >>> 16) & 0xff), (byte)((bytes >>> 8) & 0xff), (byte)((bytes ) & 0xff) }; } InetAddress.getByAddress(unpack(packedBytes)).getHostAddress() 
您也可以使用Google Guava InetAddress类 :
 String ip = "192.168.0.1"; InetAddress addr = InetAddresses.forString(ip); // Convert to int int address = InetAddresses.coerceToInteger(addr); // Back to str String addressStr = InetAddresses.fromInteger(address)); 
 我修改了我原来的答案。 在Sun的InetAddress实现中, hashCode方法产生了IPv4地址的整数表示,但正如指出的那样,JavaDoc并不能保证这一点。 因此,我决定使用ByteBuffer类来计算IPv4地址的值。 
 import java.net.InetAddress; import java.nio.ByteBuffer; // ... try { // Convert from integer to an IPv4 address InetAddress foo = InetAddress.getByName("2130706433"); String address = foo.getHostAddress(); System.out.println(address); // Convert from an IPv4 address to an integer InetAddress bar = InetAddress.getByName("127.0.0.1"); int value = ByteBuffer.wrap(bar.getAddress()).getInt(); System.out.println(value); } catch (Exception e) { e.printStackTrace(); } 
输出将是:
 127.0.0.1 2130706433 
如果你需要学习长手math,你可以使用Substr来翻译八位字节。 (256 * 256 * 256)或(2 ^ 24)秒乘以(256 * 256)(2 ^ 16)乘以(256)(2 ^ 8)乘以1得到的第一个八位位组(2 ^ 0)
127 *(2 ^ 24)+ 0 *(2 ^ 16)+ 0 *(2 ^ 8)+ 1 *(2 ^ 0)2130706432 + 0 + 0 + 1 = 2130706433
我还没有尝试过。 性能,但最简单的方法可能是使用NIO的ByteBuffer 。
例如
  byteBuffer.put(integer).array(); 
会返回一个表示整数的字节数组。 您可能需要修改字节顺序。
其他方式:
 public static long ipToLong(String ipAddress) { String[] ipAddressInArray = ipAddress.split("\\."); long result = 0; for (int i = 0; i < ipAddressInArray.length; i++) { int power = 3 - i; int ip = Integer.parseInt(ipAddressInArray[i]); result += ip * Math.pow(256, power); } return result; }