Человек читаемый DhcpInfo.ipAddress? - PullRequest
8 голосов
/ 14 июня 2011

Мне интересно, как получить читабельный IP-адрес от DhcpInfo.ipAddress?Сложность в том, что это целое число, и, очевидно, вы не можете сохранить IP-адрес в целое числоИтак, как закодирован IP-адрес, чтобы его можно было хранить в int?Документация не помогает этой проблеме: http://developer.android.com/reference/android/net/DhcpInfo.html#ipAddress Спасибо: -)

Ответы [ 5 ]

8 голосов
/ 05 июня 2012

Используйте эту функцию 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();
    }
}
8 голосов
/ 14 июня 2011

Вы можете на самом деле.

IP-адрес как int: AABBCCDD, а в удобочитаемой форме - AA.BB.CC.DD, но в десятичной основе. Как видите, вы можете легко извлечь их, используя побитовые операции или преобразовав int в байтовый массив.

Смотри картинку:

enter image description here

5 голосов
/ 14 июня 2011

Как уже упоминалось другими авторами, IP-адрес составляет 4 байта, которые могут быть упакованы в один int. Андрей привел хорошую иллюстрацию, показывающую как. Если вы храните его в объекте InetAddress, вы можете использовать ToString (), чтобы получить удобочитаемую версию. Что-то вроде:

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);
String s = address.ToString();
5 голосов
/ 14 июня 2011

очевидно, что вы не можете сохранить IP-адрес в целое число

На самом деле, это все IP-адрес (v4) - 32-разрядное целое число (или 128-разрядное в случае IPv6).

«Человекочитаемый» формат, о котором вы говорите, создается путем деления битов целого числа на группы по 8, называемых «октетами», и преобразования в основание 10, например, "192.168.0.1".

Биты этого адреса будут следующими (пробелы добавлены для удобства чтения):

11000000 10101000 00000000 00000001

Что соответствует десятичному целому числу 3,232,235,521.

0 голосов
/ 14 ноября 2014

просто переверните IP-адрес, который вы получаете в байтах

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