Java编程IP地址和数字相互转换代码示例

最近才知道,将ip地址转换成十进制、八进制、十六进制同样可以访问网站。

IP转为数字(第二种算法。用左移、按位或实现。效率更高。):

public long ipToLong(String ipAddress) { 

long result = 0; 

String[] ipAddressInArray = ipAddress.split("\\."); 

for (int i = 3; i >= 0; i--) { 

  long ip = Long.parseLong(ipAddressInArray[3 - i]); 

  //left shifting 24,16,8,0 and bitwise OR 

  //1. 192 << 24
  //1. 168 << 16
  //1. 1  << 8
  //1. 2  << 0
  result |= ip << (i * 8); 

}
return result;
 } 

数字转为IP,两种算法都差不多:

//ip = 3232235778
 public String longToIp(long ip) {
StringBuilder result = new StringBuilder(15); 

for (int i = 0; i < 4; i++) { 

  result.insert(0,Long.toString(ip & 0xff)); 

  if (i < 3) {
    result.insert(0,'.');
  } 

  ip = ip >> 8;
}
return result.toString();
 } 

 //ip = 3232235778
 public String longToIp2(long ip) { 

return ((ip >> 24) & 0xFF) + "."
  + ((ip >> 16) & 0xFF) + "."
  + ((ip >> 8) & 0xFF) + "."
  + (ip & 0xFF);
 } 

完整代码:

public class JavaBitwiseExample { 

  public static void main(String[] args) { 

    JavaBitwiseExample obj = new JavaBitwiseExample(); 

    System.out.println("iptoLong : " + obj.ipToLong("192.168.1.2"));
    System.out.println("iptoLong2 : " + obj.ipToLong2("192.168.1.2")); 

    System.out.println("longToIp : " + obj.longToIp(3232235778L));
    System.out.println("longToIp2 : " + obj.longToIp2(3232235778L)); 

  } 

  // example : 192.168.1.2
  public long ipToLong(String ipAddress) { 

    // ipAddressInArray[0] = 192
    String[] ipAddressInArray = ipAddress.split("\\."); 

    long result = 0;
    for (int i = 0; i < ipAddressInArray.length; i++) { 

      int power = 3 - i;
      int ip = Integer.parseInt(ipAddressInArray[i]); 

      // 1. 192 * 256^3
      // 2. 168 * 256^2
      // 3. 1 * 256^1
      // 4. 2 * 256^0
      result += ip * Math.pow(256, power); 

    } 

    return result; 

  } 

  public long ipToLong2(String ipAddress) { 

    long result = 0; 

    String[] ipAddressInArray = ipAddress.split("\\."); 

    for (int i = 3; i >= 0; i--) { 

      long ip = Long.parseLong(ipAddressInArray[3 - i]); 

      // left shifting 24,16,8,0 and bitwise OR 

      // 1. 192 << 24
      // 1. 168 << 16
      // 1. 1 << 8
      // 1. 2 << 0
      result |= ip << (i * 8); 

    } 

    return result;
  } 

  public String longToIp(long i) { 

    return ((i >> 24) & 0xFF) +
          "." + ((i >> 16) & 0xFF) +
          "." + ((i >> 8) & 0xFF) +
          "." + (i & 0xFF); 

  } 

  public String longToIp2(long ip) {
    StringBuilder sb = new StringBuilder(15); 

    for (int i = 0; i < 4; i++) { 

      // 1. 2
      // 2. 1
      // 3. 168
      // 4. 192
      sb.insert(0, Long.toString(ip & 0xff)); 

      if (i < 3) {
        sb.insert(0, '.');
      } 

      // 1. 192.168.1.2
      // 2. 192.168.1
      // 3. 192.168
      // 4. 192
      ip = ip >> 8; 

    } 

    return sb.toString();
  }
} 

总结

以上就是本文关于Java编程IP地址和数字相互转换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出!

(0)

相关推荐

  • Java中的IP地址和InetAddress类使用详解

    Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议,它是Internet中各方所遵循的公共协议.TCP(Transport Control Protocol)是一种传输控制协议,IP(Internet Protocol)是一种网际协议,TCP/IP代表这两个协议的. TCP/IP分为四个层次: 网络接口层:负责接收和发送物理帧: 网络层

  • Java编程中利用InetAddress类确定特殊IP地址的方法

    InetAddress类 InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名. 你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解. InetAddress类内部隐藏了地址数字. InetAddress类中的工厂方法 InetAddress类没有明显的构造函数.为生成一个InetAddress对象,必须运用一个可用的工厂方法. 工厂方法(factory method)仅是一个类中静态方法返回一个该类实例的约定. 对于InetAddres

  • java编程实现获取服务器IP地址及MAC地址的方法

    本文实例讲述了java编程实现获取服务器IP地址及MAC地址的方法.分享给大家供大家参考,具体如下: 已测系统: windows linux unix 排除127.0.0.1 和 0.0.0.0.1等非正常IP import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.ArrayList; import java.util.Enu

  • java根据ip地址获取详细地域信息的方法

    互联网有很多接口可以实现通过ip查询到具体的位置,如下: 通过淘宝IP地址库获取IP位置 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串] 响应信息:(json格式的)国家 .省(自治区或直辖市).市(县).运营商 返回数据格式: {"code":0,"data":{"ip":"210.75.225.254","country"

  • java中获取当前服务器的Ip地址的方法

    1.tomcat是一款免费的开源Web服务器,如果部署在本地,那么对应的那么为localhost,对应地址为127.0.0.1. 例子:可以通过http://localhost:8080/项目root值访问,也可以通过http://127.0.0.1/项目root值访问. 如果部署在服务器(linux)系统类,则需要通过服务器的Ip地址进行访问. 2.下面说说怎么获取Ip地址: 获取本地的Ip地址: public static void main(String[] args) { try { I

  • java实现根据ip地址获取地理位置

    最近项目某个功能需要根据ip地址从第三方接口获取详细的地理位置,从网上找了很多例子,主要接口有新浪的,淘宝的,腾讯的.试了淘宝的,如果是数量级小的还可以,如果数量级达到上十万级就速度慢了,会导致系统崩溃.下面例子是新浪的,例子不是适合每个项目,需要改一下. /** ipSearchUrl=http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=(这是新浪的接口地址) 在项目中新浪的接口地址没有直接写死,而是去读属性文件. *

  • 使用Java代码将IP地址转换为int类型的方法

    基本知识点    IP --> 整数: 把IP地址转化为字节数组 通过左移位(<<).与(&).或(|)这些操作转为int 整数 --> IP: 将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP. 将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP. 将整数值进行右移位操作(>>>),右移8位,再进行与操

  • Java 判断IP地址的合法性实例详解

    Java 判断IP地址的合法性 0.前言 有时候我们要对用户输入的IP地址进行校验,判断这个IP地址是不是一个合法的IP地址. 1.实现思路 最简单的实现方法是构造一个正则表达式.判断用户的输入与正则表达式是否匹配.若匹配则是正确的IP地址,否则不是正确的IP地址.这里的难点是如何构造出一个可用的正则表达式. 2.Java实现 /** * Created by HUPENG on 2016/9/26. */ public class Tool { /** * 判断IP地址的合法性,这里采用了正则

  • Java编程IP地址和数字相互转换代码示例

    最近才知道,将ip地址转换成十进制.八进制.十六进制同样可以访问网站. IP转为数字(第二种算法.用左移.按位或实现.效率更高.): public long ipToLong(String ipAddress) { long result = 0; String[] ipAddressInArray = ipAddress.split("\\."); for (int i = 3; i >= 0; i--) { long ip = Long.parseLong(ipAddress

  • java编程实现两个大数相加代码示例

    通常情况,实现大数运算是通过BigInteger和BigDecimal两种方法.这两种方法分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运算变得很简单.但本文介绍的并不是通过上述两种方法实现Java中的大数运算. 主要的思想是:把两个数存在String中了,然后将每个数字取出,放到数组,由最末位开始计算,算加法,判断是否进位,进位则前位+1,若超过长度,则copy到新的数组. 代码如下: public cl

  • Java编程将汉字转Unicode码代码示例

    上一次接触到编码的知识,还是上大学的时候,那时候学的是通信工程专业,有关编码的内容,不记得是在通信原理还是信息论与编码里面学到的了.却依然记得那个信息论与编码的老师,最喜欢吃的是尖椒肥肠盖饭,不知道是尖椒肥肠吃多了还是太聪明的缘故,三十多岁就开始拜顶了.那四年真是一段难忘的回忆... 话不多说,咱们进入正题.这里是一个简单的Java编程将汉字转Unicode码代码示例,下面是代码: package me.socketthread; public class ToUnicode { /** * @

  • Java编程利用socket多线程访问服务器文件代码示例

    这篇文章将向大家展示Java编程利用socket多线程访问服务器文件代码示例,如果您想先了解Java多线程socket编程的基础知识,可以看下这篇文章:Java多线程编程实现socket通信示例代码. 接下来进入正文,我们看看利用socket多线程访问服务器代码: ServerMain.java package com.ysk.webServer; import java.io.File; import java.io.IOException; import java.net.ServerSoc

  • Java编程GUI中的事件绑定代码示例

    程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定: 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现.例如:C. 针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定 后期绑定:在运行时根据具体对象的类型进行绑定. 若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间

  • Java编程实现邻接矩阵表示稠密图代码示例

    我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那么A中的一个元素aij不仅体现出了结点vi和结点vj的关系,而且aij的值正可以表示权值的大小. 邻接矩阵模型类 邻接矩阵模型类的类名为AMWGraph.java,能够通过该类构造一个邻接矩阵表示的图,且提供插入结点,插入边,取得某一结点的第一个邻接结点和下一个邻接结点. import java.u

  • Java编程实现五子棋人人对战代码示例

    利用Java,在控制台操作下,编写的五子棋,作为复习二维数组,面向对象等基础知识.w表示白棋,b表示黑棋 import java.util.Scanner; public class MainMethod { public static char[][] c = new char[10][10]; public static void main(String[] args) { MainMethod mainMethod = new MainMethod(); mainMethod.init()

  • Java编程常见内存溢出异常与代码示例

    Java 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间有可达路径以免对象被垃圾回收, 那么当创建的对象过多时, 会导致 heap 内存不足, 进而引发 OutOfMemoryError 异常. /** * @author xiongyongshun * VM Args: java -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError */ public class OutOfMemoryErrorTe

  • Java编程实现深度优先遍历与连通分量代码示例

    深度优先遍历 深度优先遍历类似于一个人走迷宫: 如图所示,从起点开始选择一条边走到下一个顶点,没到一个顶点便标记此顶点已到达. 当来到一个标记过的顶点时回退到上一个顶点,再选择一条没有到达过的顶点. 当回退到的路口已没有可走的通道时继续回退. 而连通分量,看概念:无向图G的极大连通子图称为G的连通分量( Connected Component).任何连通图的连通分量只有一个,即是其自身,非连通的无向图有多个连通分量. 下面看看具体实例: package com.dataStructure.gra

  • Java编程线程间通信与信号量代码示例

    1.信号量Semaphore 先说说Semaphore,Semaphore可以控制某个资源可被同时访问的个数,通过acquire()获取一个许可,如果没有就等待,而release()释放一个许可.一般用于控制并发线程数,及线程间互斥.另外重入锁ReentrantLock也可以实现该功能,但实现上要复杂些. 功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中等待的另外5个人中又有一个人可以占用了.另外等待的

随机推荐