Преобразование IP-адреса в двоичные значения (Java) - PullRequest
3 голосов
/ 28 марта 2012

Я пытаюсь написать программу на Java, которая будет принимать IP-адрес и преобразовывать его в двоичный файл.

Вот что у меня есть:

import java.util.Scanner;

public class IpConverter{

public static void main (String[]args)
{

    int result;

    String data_in;

    int data_out;

        Scanner scan = new Scanner(System.in);

        try
        {
            System.out.print("Enter an IP address: ");
            data_in = scan.next();

            data_out = Integer.parseInt(data_in, 10);
            System.out.println (data_in + "is equivalent to" + data_out);
        }
        catch (NumberFormatException nfe){
            System.out.println("Wrong data type!");

        }
    }
}

Ответы [ 5 ]

7 голосов
/ 28 марта 2012

Опираясь на ответ jtahlborn:

byte[] bytes = InetAddress.getByName(data_in).getAddress();
data_out = new BigInteger(1, bytes).toString(2);

Теперь data_out содержит IP-адрес в виде двоичного числа.

4 голосов
/ 28 марта 2012

Вы можете использовать InetAddress для анализа текстового представления и преобразования в байт []. Вы можете использовать BigDecimal для преобразования байта [] в большое целое число.

2 голосов
/ 28 марта 2012
Scanner in = new Scanner(System.in);
System.out.println("Please enter an IP Address.");
String ip = in.nextLine();
String[] octetArray = ip.split("\\.");
for (String string : octetArray){
    int octet = Integer.parseInt(string);
    String binaryOctet = Integer.toBinaryString(octet);
    System.out.println(binaryOctet);
}

, поэтому для ввода 10.10.150.1 вывод будет

1010

1010

10010110

1

0 голосов
/ 09 февраля 2019

Java-библиотека с открытым исходным кодом и открытым исходным кодом может сделать это за вас.Он может анализировать различные форматы IP-адресов, включая IPv4 или IPv6.Отказ от ответственности: я руководитель проекта библиотеки IPAddress.

Вот пример кода, подобного вашему:

public static void main(String[] args) {
    try(Scanner scan = new Scanner(System.in)) {
        System.out.print("Enter IP addresses: ");
        while(true) {
            String data_in = scan.next();
            IPAddressString string = new IPAddressString(data_in);
            IPAddress addr = string.toAddress();
            System.out.println(addr + " is equivalent to " + addr.toBinaryString());
        }
    } catch (AddressStringException e){
        System.out.println("invalid format: " + e.getMessage());
    } catch(NoSuchElementException e) {}
}

Пример использования:

Enter IP addresses: 1.2.3.4 a:b:c:d:e:f:a:b
1.2.3.4 is equivalent to 00000001000000100000001100000100
a:b:c:d:e:f:a:b is equivalent to 00000000000010100000000000001011000000000000110000000000000011010000000000001110000000000000111100000000000010100000000000001011
0 голосов
/ 24 октября 2013

Если вы хотите избежать разрешения имен, вы можете использовать следующий код, преобразующий строку адреса IPv4 в байтовый массив:

String[] octetArray = ipAddressStr.split("\\.");
assert octetArray.length == 4;
byte[] ipAddressBytes = new byte[4];
for (int i = 0; i < 4; ++i) {
    ipAddressBytes[i] = Integer.valueOf(octetArray[i]).byteValue();
}
...