Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Going from 127.0.0.1 to 2130706433, and back again

Tags:

Using the standard Java libraries, what is the quickest way to get from the dotted string representation of an IPV4-address ("127.0.0.1") to the equivalent integer representation (2130706433).

And correspondingly, what is the quickest way to invert said operation - going from the integer 2130706433 to the string representation"127.0.0.1"?

like image 449
knorv Avatar asked Feb 10 '10 23:02

knorv


2 Answers

String to 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()); 

Int to 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() 
like image 128
Geoff Reedy Avatar answered Oct 05 '22 06:10

Geoff Reedy


You can also use the Google Guava InetAddress Class

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)); 
like image 24
Ido Avatar answered Oct 05 '22 06:10

Ido