可读的DhcpInfo.ipAddress?

| 我想知道如何从DhcpInfo.ipAddress获取可读的IP地址吗?棘手的是,它是一个整数,显然您不能将IP地址存储为整数。那么,如何对IP地址进行编码,使其可以存储在int中?该文档没有对此问题提供任何帮助:http://developer.android.com/reference/android/net/DhcpInfo.html#ipAddress谢谢:-)     
已邀请:
        可以的 IP地址(以int表示)为:“ 0”,并且以人类可读的形式表示为“ 1”,但以十进制为基础。如您所见,您可以使用按位运算或将int转换为字节数组来轻松提取它们。 看图片:     
        使用这个功能 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();
    }
}
    
           显然,您不能将IP地址存储为整数 实际上,所有IP(v4)地址都是-一个32位整数(对于IPv6,则为128位)。 您正在谈论的“人类可读”格式是通过将整数的位分成8个称为“八位字节”的组并转换为以10为底的整数产生的。 \“
192.168.0.1
\”。 该地址的位如下(为可读性添加了空格):
11000000 10101000 00000000 00000001
对应于十进制整数3,232,235,521。     
        正如其他张贴者所提到的,一个IP地址是4个字节,可以打包为一个int。安德烈(Andrey)给出了一个很好的例证,说明了如何进行。如果将其存储在InetAddress对象中,则可以使用ToString()获取人类可读的版本。就像是:
byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);
String s = address.ToString();
    
        只需反转您收到的以字节为单位的ipaddress
byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
ArrayUtils.reverse(bytes);
// then
InetAddress myaddr = InetAddress.getByAddress(ipAddress);
String ipString = myaddr.getHostAddress();
    

要回复问题请先登录注册