G - IP地址转换--java

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36367789/article/details/78734386 IP地址总是由4个0-255的数字以”.”隔开的形式来显示给用户,例如192.168.0.1。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36367789/article/details/78734386

IP地址总是由4个0-255的数字以”.”隔开的形式来显示给用户,例如192.168.0.1。在计算机中,一个IP地址用4字节来依次存储其从右到左的4个数字部分,每个字节(8比特)以2进制的形式存储相应的IP地址数字,请你实现一个从IP地址的显示格式到计算机存储格式的转换。

Input
每行输入一个IP地址,如果输入为-1,结束输入

Output
每行输出一个IP地址在计算机存储中以二进制表示的4字节内容

Sample Input
192.168.0.1
255.255.0.0
1.0.0.1
-1

Sample Output
11000000101010000000000000000001
11111111111111110000000000000000
00000001000000000000000000000001

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Created by Fant.J.
 * 2017/12/6 19:20
 */
public class Main {

    private static String ipAddr = null;
    //用来存储ip转换成二进制的字符串
    private static String result = "";

    //用来存储result集合
    private static List list = new ArrayList();

    //count:用来协助计算字节数。一个ip分四段,第一段转换二进制完成后result长度是1*8,第二段是2*8...
    private static int count = 1;

    public static void main(String []args){
        Scanner scanner = new Scanner(System.in);
        ipAddr = scanner.nextLine();
        while (! ipAddr.contains("-1")){

            String[] datas = ipAddr.split("\\.");
            int data1 = Integer.valueOf(datas[0]);
            int data2 = Integer.valueOf(datas[1]);
            int data3 = Integer.valueOf(datas[2]);
            int data4 = Integer.valueOf(datas[3]);
            //将获取的四个ip段分别交给pincou(拼凑)方法处理成二进制并倒序相加成字符串类型
            pincou(data4);
            pincou(data3);
            pincou(data2);
            pincou(data1);

            //将当前ip转换成的result字符串存入list集合
            list.add(result);

            //初始化 三个参数
            result="";
            count = 1;
            ipAddr = scanner.nextLine();
        }
        for (Object item:list){
            System.out.println(item);
        }
    }
    public static void pincou(int data){
        while (true){
            int yushu = data%2;
            result = yushu+result;
            data /= 2;
            if (data==0){
                //获取当前result字符串长度
                int judge = result.length();
                //判断下是否够8*count个字节,如果不够就在前面补0
                if (judge<8*count){
                    for (int i = 0;i<8*count-judge;i++){
                        result = 0+result;
                    }
                }
                count++;
                break;
            }
        }
    }
}

做的过程中有个逻辑错误,找了好长时间分享给大家。
就是在获取result长度当作for循环条件的时候。我起初是用result.lenth() 获取。导致字节数不够8(不满足我的要求)就运行下面程序。之后我先把这个长度赋值给变量judge,然后在做循环。希望大家以后用循环,切忌把动态改变的东西当作条件来判断
image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
12天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
42 4
|
6月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
6月前
|
存储
JavaWeb如何获取当前访问IP
JavaWeb如何获取当前访问IP
135 0
|
6天前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
|
5月前
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
48 1
|
6月前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
92 0
|
5月前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
52 3
|
4月前
|
Java Redis 数据安全/隐私保护
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
|
5月前
|
Java Apache Maven
蓝易云 - java判断ip是否为指定网段
在这个例子中,我们首先创建了一个 `SubnetUtils`对象,它表示一个子网。然后,我们使用 `isInRange`方法来检查指定的IP地址是否在这个子网内。如果IP地址在子网内,`isInRange`方法将返回 `true`,否则返回 `false`。
97 3
|
5月前
|
数据采集 Java 数据安全/隐私保护
使用Java进行网络采集:代理IP与参数传递详解
Java参数传递是按值传递,包括对象引用的值。当传递对象时,方法内部修改对象内容会影响原始对象,但不能改变原始引用。示例展示了如何在爬虫代理中使用此机制,通过`ProxySettings`类传递代理信息,方法内可访问但不能更改原始对象。理解这一机制对编写高效无错的Java代码至关重要。
使用Java进行网络采集:代理IP与参数传递详解