人类可读的DhcpInfo.ipAddress?

时间:2011-06-14 14:58:48

标签: android ip dhcp

我想知道如何从DhcpInfo.ipAddress获取人类可读的IP地址?关于它的棘手的事情是,它是一个整数,显然你不能存储整数的IP地址。那么,IP地址如何编码,它可以存储在一个int中?该文档没有对此问题提供任何帮助:http://developer.android.com/reference/android/net/DhcpInfo.html#ipAddress谢谢: - )

5 个答案:

答案 0 :(得分:8)

你实际上可以。

int的IP地址是:AABBCCDD,以人类可读的形式,它是AA.BB.CC.DD,但是以十进制为基础。如您所见,您可以使用按位运算或将int转换为字节数组轻松地提取它们。

见图:

enter image description here

答案 1 :(得分:8)

使用此功能 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();
    }
}

答案 2 :(得分:5)

  

显然你不能将IP地址存储在整数

实际上,所有的IP(v4)地址都是 - 一个32位整数(或者在IPv6的情况下是128位)。

您所谈论的“人类可读”格式是通过将整数的比特分成称为“八位字节”的8个组并转换为基数10来生成的。 “192.168.0.1”。

该地址的位如下(为了便于阅读而添加了空格):

11000000 10101000 00000000 00000001

对应于十进制整数3,232,235,521。

答案 3 :(得分:5)

正如其他海报所提到的,ip地址是4个字节,可以打包到一个int中。安德烈给出了一个很好的插图展示了如果将它存储在InetAddress对象中,则可以使用ToString()来获取人类可读的版本。类似的东西:

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

答案 4 :(得分:0)

只需反转以字节为单位收到的ipaddress

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
ArrayUtils.reverse(bytes);
// then
InetAddress myaddr = InetAddress.getByAddress(ipAddress);
String ipString = myaddr.getHostAddress();