Java: как конвертировать dec в 32bit int? - PullRequest
0 голосов
/ 13 февраля 2011

Как преобразовать десятичное представление IP-адреса в 32-битное целое число в Java?Я использую класс InetAddress и метод getLocalHost для получения IP-адреса:

public class getIp {

public static void main(String[] args) {
   InetAddress ipaddress;

    try {
      ipaddress=InetAddress.getLocalHost();
       System.out.println(ipaddress);
        }
      catch(UnknownHostException ex)
      {
        System.out.println(ex.toString()); 
      }


    }
}

Чем я должен преобразовать результат в 32-битное целое число, а затем в строку, как мне это сделать?Спасибо!

Ответы [ 5 ]

5 голосов
/ 13 февраля 2011

IP-адрес просто не является double значением.Это все равно, что спросить номер для красного цвета.Это не имеет смысла.

Что вы действительно пытаетесь сделать?Чего ты надеешься достичь?Какая картина больше?Что бы это ни было, я не думаю, что вы хотите вовлечь double.

1 голос
/ 13 февраля 2011

Если вы планируете использовать адреса ipv6, вы должны использовать long вместо целого числа.Вы можете преобразовать адрес в один длинный, сдвигая в нем каждый байт.

long ipNumber = 0;
for (Byte aByte : ipaddress.getAddress()) {
    ipNumber = (ipNumber << 8) + aByte;
}

Это будет работать для адресов ipv4 и ipv6.

1 голос
/ 13 февраля 2011

Если IP-адрес IPv6, он не будет работать. В противном случае для реализации Sun / Oracle и IPv4 вы можете играть грязно: ipaddress.hashCode() - работает, но может сломаться в будущем, поэтому не рекомендуется .

В противном случае (рекомендуется): int ipv4 = ByteBuffer.wrap(addr.getAddress()).getInt()

0 голосов
/ 13 февраля 2011

Я могу ошибаться, но может быть человек просто хотел напечатать шестнадцатеричный IP-адрес? ;)

Попробуйте это:

    try {
        InetAddress ipaddress = InetAddress.getLocalHost();
        System.out.println(ipaddress);

        byte[] bytes = ipaddress.getAddress();
        System.out.println(String.format("Hex address: %02x.%02x.%02x.%02x", bytes[0], bytes[1], bytes[2], bytes[3]));
    } catch (UnknownHostException ex) {
        System.out.println(ex.toString());
    }
0 голосов
/ 13 февраля 2011

Почему бы вместо этого не получить его в виде байтового массива?

...