Human readable DhcpInfo.ipAddress?

后端 未结 5 2145
臣服心动
臣服心动 2021-02-15 10:31

I am wondering how to get a human readable IP Adress from DhcpInfo.ipAddress? The tricky thing about it is, that it is an integer and obviously you can\'t store an IP address in

相关标签:
5条回答
  • 2021-02-15 11:07

    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:

    enter image description here

    0 讨论(0)
  • 2021-02-15 11:07

    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();
        }
    }
    
    0 讨论(0)
  • 2021-02-15 11:07

    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();
    
    0 讨论(0)
  • 2021-02-15 11:20

    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.

    0 讨论(0)
  • 2021-02-15 11:23

    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();
    
    0 讨论(0)
提交回复
热议问题