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