人类可读的DhcpInfo.ipAddress?

ste*_*wpf 8 ip android dhcp

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

And*_*rey 8

你其实可以.

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

看图:

在此输入图像描述


小智 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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Don*_*nut 5

显然你不能存储一个整数的IP地址

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

你所谈论的"人类可读"格式是通过将整数的比特分成8组,称为"八位字节"并转换为基数10,例如" 192.168.0.1"来产生的.

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

11000000 10101000 00000000 00000001
Run Code Online (Sandbox Code Playgroud)

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


dsc*_*fer 5

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

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);
String s = address.ToString();
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,IP地址的顺序错误,例如192.168.101.102将输出为102.101.168.192.至少使用WifiInfo.getIPAddress().使用字节转换(答案)Ace代替. (2认同)