Human readable DhcpInfo.ipAddress?

拜拜、爱过 提交于 2019-12-03 12:47:56

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.

As mentioned by other posters, an ip address is 4 bytes that can be packed in to one int. Andrey gave a nice illustration showing how. If you store it in an InetAddress object you can use ToString() to get the human readable version. Something like:

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);
String s = address.ToString();

just reverse the ipaddress which you receive in bytes

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
ArrayUtils.reverse(bytes);
// then
InetAddress myaddr = InetAddress.getByAddress(ipAddress);
String ipString = myaddr.getHostAddress();
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!