I am wondering how to get a human readable IP Adress from DhcpInfo.ipAddress? The tricky thing about it is, that it is an integer and obviously you can't store an IP address in an integer. So, how is the IP address encoded, that it can be stored in an int? The documentation doesn't give any help to this problem: http://developer.android.com/reference/android/net/DhcpInfo.html#ipAddress Thanks :-)
You can actually.
IP address as int is: AABBCCDD
and in human-readable form it is AA.BB.CC.DD
but in decimal base. As you see you can easily extract them using bitwise operations or by converting int to byte array.
See the picture:
Use this function NetworkUtils.java \frameworks\base\core\java\android\net)
public static InetAddress intToInetAddress(int hostAddress) {
byte[] addressBytes = { (byte)(0xff & hostAddress),
(byte)(0xff & (hostAddress >> 8)),
(byte)(0xff & (hostAddress >> 16)),
(byte)(0xff & (hostAddress >> 24)) };
try {
return InetAddress.getByAddress(addressBytes);
} catch (UnknownHostException e) {
throw new AssertionError();
}
}
obviously you can't store an IP address in an integer
Actually, that's all an IP (v4) address is -- a 32-bit integer (or 128-bit, in the case of IPv6).
The "human-readable" format you're talking about is produced by dividing the bits of the integer into groups of 8 called "octets" and converting to base 10, e.g. "192.168.0.1
".
The bits of this address would be as follows (spaces added for readability):
11000000 10101000 00000000 00000001
Which corresponds to the decimal integer 3,232,235,521.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With