【问题标题】:Converting an IP address to binary values (Java)将 IP 地址转换为二进制值 (Java)
【发布时间】:2012-04-11 14:50:56
【问题描述】:

我正在尝试用 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!");

        }
    }
}

【问题讨论】:

  • 假设您的 ips 是以 dotted.quad 格式输入的(例如 127.0.0.1),parseint 不会为您提供完整的 32 位表示,因为这不是有效的 int。跨度>
  • 为了将来参考,如果您选择所有代码并按 CTRL+K,您将得到一个大代码块,而不是原来的许多小代码块。
  • 是的,127.0.0.1 将是我想要的格式。
  • stackoverflow.com/questions/1146581/…有相同问题的答案

标签: java binary ip-address converter


【解决方案1】:

以 jtahlborn 的回答为基础:

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

现在data_out 包含作为二进制数的 IP 地址。

【讨论】:

    【解决方案2】:

    您可以使用 InetAddress 解析文本表示并转换为 byte[]。您可以使用 BigDecimal 将 byte[] 转换为大整数。

    【讨论】:

      【解决方案3】:
      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

      【讨论】:

      • 字符串 ip = in.nextLine();命令给我一个错误。 “错误:找不到符号字符串 ip = in.nextLine();”
      • 这很奇怪,代码是直接从我运行良好的代码中复制而来的。
      • 还有什么我需要导入的吗?除了 java.util.Scanner?我也导入了 java.lang.String。
      • 扫描仪是您唯一需要导入的工具。
      • 不工作,伙计。你认为你可以添加更多代码来看看我是否遗漏了什么?
      【解决方案4】:

      如果您想避免名称解析,可以使用以下代码将 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();
      }
      

      【讨论】:

        【解决方案5】:

        open-source IPAddress Java library 可以为您做到这一点。它可以解析各种 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-07
          • 2013-11-13
          • 2014-11-07
          • 1970-01-01
          • 2016-07-05
          • 2011-02-13
          • 1970-01-01
          • 2017-04-23
          相关资源
          最近更新 更多