`
halloffame
  • 浏览: 55972 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java把ip地址存放到一个int型变量

    博客分类:
  • java
阅读更多

java把ip地址存放到一个int型变量

 

package com.zwx;

public class test {
	public static void main(String[] args) {
		byte[] bt = new byte[4];
		bt[0] = 111;
		bt[1] = 112;
		bt[2] = 113;
		bt[3] = 114;
		
		int i = byteArrayToInt(bt);  
		System.out.println("int--->" + i);
		
		byte[] b = intToByteArrayl(i);
		System.out.print("ip--->");
		for (byte bb : b) {
		   System.out.print(bb + ".");
		}
	}
	
	//int转ip(字节数组)
	public static byte[] intToByteArrayl(int i) {   
	    byte[] result = new byte[4];   
	    result[0] = (byte)((i >> 24) & 0xFF);
	    result[1] = (byte)((i >> 16) & 0xFF);
	    result[2] = (byte)((i >> 8) & 0xFF); 
	    result[3] = (byte)(i & 0xFF);
	    return result;
	}
	
	//ip(字节数组)转int
	public static int byteArrayToInt(byte[] b) {
        int value = 0;
        for (int i = 0; i < 4; i++) {
    	   value |= b[i];
		   if ( i < 3 ) {
			 value = value << 8;
		   }
        }
        return value;
	}
	
}

 

运行结果:

int--->1869640050

ip--->111.112.113.114.

 

------------------------补充---------------------------

考虑到1楼提出的byte的范围为-128-127,而IP有可能是192.168.1.1,也就是说java都是有符号的,我们可以把有符号的变成无符号的,也就是-1就相当于255,其实如果是用c就简单多了,直接unsigned就可以了,c在这些方面确实比较强大,一篇很不错的原码, 反码和补码的文章:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

 

修正后的代码:

package com.zwx;  
  
public class test {  
    public static void main(String[] args) {  
        byte[] bt = new byte[4];  
        bt[0] = (byte)192;  
        bt[1] = (byte)128;  
        bt[2] = 1;  
        bt[3] = (byte)255; //相当于 bt[3] = -1;
          
        int i = byteArrayToInt(bt);    
        System.out.println("int--->" + i);  
          
        byte[] b = intToByteArrayl(i);  
        System.out.print("ip--->");  
        for (byte bb : b) {  
           System.out.print(Byte.toUnsignedInt(bb) + ".");  
           //或者:System.out.print((bb & 0xFF) + ".");
        }  
    }  
      
    //int转ip(字节数组)  
    public static byte[] intToByteArrayl(int i) {     
        byte[] result = new byte[4];     
        result[0] = (byte)((i >> 24) & 0xFF);  
        result[1] = (byte)((i >> 16) & 0xFF);  
        result[2] = (byte)((i >> 8) & 0xFF);   
        result[3] = (byte)(i & 0xFF);  
        return result;  
    }  
      
    //ip(字节数组)转int  
    public static int byteArrayToInt(byte[] b) {  
        int value = 0;  
        for (int i = 0; i < 4; i++) {  
           value |= (b[i] & 0xFF);  
           if ( i < 3 ) {  
             value = value << 8;  
           }
           //System.out.println(Integer.toBinaryString(value));
        }  
        return value;  
    }  
      
} 

 

修正后运行结果:

int--->-1065352705

ip--->192.128.1.255.

5
2
分享到:
评论
3 楼 shiguiwu 2017-10-18  
     
2 楼 halloffame 2015-11-01  
QuarterLifeForJava 写道
想法不错,但是有个问题,byte的范围为-128-127,而我IP有可能是192.168.1.1
0-255呢!

感谢指正,已经修改过,请看补充部分
1 楼 QuarterLifeForJava 2015-10-29  
想法不错,但是有个问题,byte的范围为-128-127,而我IP有可能是192.168.1.1
0-255呢!

相关推荐

    用4个字节存放IP地址,并且读出来的源码

    ### 使用4个字节存放IP地址的C语言实现 在计算机网络中,IP地址是用于唯一标识互联网上每个节点的数字标识。IPv4是最常用的版本之一,它采用32位二进制数表示,通常被划分为四个8位字段,分别对应于四个十进制数字...

    java笔记 java笔记

    - **自动类型提升**:当两个操作数的类型不同且其中一个为较小的数据类型时,会自动提升到较大的数据类型。 - **显式类型转换**:通过`(类型)`进行类型转换。 ##### 4.4 控制流 Java提供了多种控制流语句,如if-...

    java获取tomcat端口.doc

    ### Java 获取 Tomcat 端口及服务器IP的...总结来说,无论是获取服务器的IP地址和端口,还是部署Java Web项目到外网,都需要对服务器环境进行适当的配置。通过以上步骤,开发者可以有效地管理和操作Java Web应用程序。

    CoreJava(java入门教程总结)

    - **基础知识**:IP地址、端口号、协议等概念。 - **TCP Socket**:面向连接的可靠传输服务。 - **服务器端**:监听端口,等待客户端连接。 - **客户端**:发起连接请求,与服务器通信。 - **URL连接**:使用...

    疯狂JAVA讲义

    我把另一个构造器里的代码复制、粘贴到这个构造器里不就可以了吗? 143 5.6 类的继承 144 5.6.1 继承的特点 144 5.6.2 重写父类的方法 145 5.6.3 父类实例的super引用 146 学生提问:我们只是创建了一个Ostrich...

    InetAddress 类中dns解析后域名、ip清空

    但是,在不同的网络环境下,IP地址会变化,如果不清空InetAddress类中的私有成员变量map,就可能会导致登录失败。 解决这个问题的方法是,使用反射技术来清空InetAddress类中的私有成员变量map。在Android系统中,...

    java课程的一般基础知识

    - **网络基础知识**:IP地址、端口、协议等基本概念。 - **TCP Socket**:使用TCP协议进行可靠的数据传输。 - **建立TCP服务器端**:监听客户端连接请求并处理。 - **建立TCP客户端**:向服务器发起连接请求。 - **...

    04747 Java语言程序设计(一) 2013年10月

    - 在进行数据库访问时,查询结果存放在一个用_ResultSet_类声明的对象中。 - **解析**: ResultSet对象用于存储SQL查询的结果集。 #### 编程题解析 **程序执行结果** - **题目**: 请写出下面程序段的执行结果。 -...

    java面试题目大全

    在方法调用时,栈会创建一个新的栈帧来保存该方法的局部变量表、操作数栈、动态链接、方法出口等信息,当方法退出时,栈帧随之销毁。 - **堆内存**:堆内存是所有线程共享的内存区域,用于存放对象实例。几乎所有的...

    2013年10月-Java语言程序设计(一)试题答案.doc

    - 在进行数据库访问时,查询结果存放在一个用`ResultSet`类声明的对象中。 - **知识点扩展**: - `ResultSet`是Java进行数据库操作时非常重要的类,用于存储SQL查询的结果集。 - 使用`PreparedStatement`或`...

    Java编程那些事儿[完整版]PDF(无加密版)

    Java提供了多种基本数据类型,包括整数型、小数型、字符型和布尔型等。 - **整数型**:byte、short、int、long等。 - **小数型**:float、double。 - **字符型**:char。 - **布尔型**:boolean。 #### 3.6 变量和...

    达内COREJAVA学习笔记.doc

    #### 三、编写与运行第一个Java程序 - **文件命名规则**: Java源文件以`.java`为扩展名,且文件名需与公共类名一致。 - **main方法**: `public static void main(String[] args)`是程序入口点。 - **编译**: 使用`...

    Java经典问题答案(带书签).pdf

    - `==`用于比较两个变量是否指向同一个对象或者两个基本类型的值是否相等。 **Switch问题** - 在Java中,`switch`语句用于基于不同的条件执行不同的代码块。 - Java 7引入了支持字符串的switch语句。 **实例变量...

    大端(Big Endian)与小端(Little Endian)简介

    在这个例子中,可以看到对于16位的`short`类型的变量`c`,它的低位`0xff`存储在较低地址,高位`0x00`存储在较高地址。而对于32位的`long`类型的变量`d`,低位`0x11`同样存储在较低地址,高位`0x44`存储在较高地址。...

    阿里巴巴2017暑期实习生招聘笔试题(1).pdf

    最大流最小割定理是图论中的一个重要概念,它表明在一个有向图中,从源点到汇点的最大流量等于图中找到的最小割的容量。题目中给出了一个例子,计算最小割的总容量来求最大流。 8. 递归与斐波那契数列: 斐波那契...

    Java极品学习资料

    - `null`代表一个空引用,可以被赋予任何引用类型的变量。 - 示例代码展示`null`的使用场景。 #### 三、Java三大特性 **多态到底是什么** - 多态是指允许一个接口被不同类的对象实现或同一消息被不同对象响应的...

    Java面试知识总结

    - **域名解析**:将域名映射到IP地址的过程。 ### 数据库相关 #### 1. SQL - **DDL**:数据定义语言,如CREATE TABLE。 - **DML**:数据操纵语言,如INSERT、UPDATE。 - **DQL**:数据查询语言,如SELECT。 - **...

    JavaSE知识点总结.doc

    创建Java程序通常从编写一个公共类开始,例如`public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }`。 #### 8. Java语法基本元素 包括变量声明、控制流...

    携程2019研发工程师笔试题及答案.pdf

    - 一个域名某一时刻只能对应1个IP地址。 - 域名可以通过DNS服务转换成IP地址。 - 携程网站可以直接通过IP地址访问。 ### 13. 数据库索引字段的选择 - **索引字段选择**:适合建立索引的字段包括: - 外键字段...

Global site tag (gtag.js) - Google Analytics