IP和整型间相互转换

 1 package com.jdk7.chapter5;
 2 
 3 import java.math.BigInteger;
 4 
 5 public class IPToLong {
 6     /**
 7      * 将字符串类型的IP转换为整型:
 8      * 1.IP中每个"."的位置(第二个"."以后的起始位置需要在第一个位置的基础上+1)
 9      * 2.使用String的substring方法截取"."分隔的每段,总共四段
10      *         另:可以使用"."分隔为四段
11      * 3.第一、第二、第三、第四段分别使用Long的parseLong方法转换为long类型后,依次向左移动24位、16位、8位、0位
12      * 4.四段相加的结果为最终的整型值
13      * @param str
14      * @return
15      */
16     public static long ipToLong(String str){
17         int point1 = str.indexOf(".");
18         int point2 = str.indexOf(".", point1+1);
19         int point3 = str.indexOf(".", point2+1);
20         long[] lon = new long[4];
21 //        lon[0] = Long.parseLong(str.substring(0, point1));
22 //        lon[1] = Long.parseLong(str.substring(point1+1, point2));
23 //        lon[2] = Long.parseLong(str.substring(point2+1, point3));
24 //        lon[3] = Long.parseLong(str.substring(point3+1, str.length()));
25 //        long result = (lon[0]<<24) + (lon[1]<<16) + (lon[2]<<8) + (lon[3]);
26         
27         String[] ip = str.split("\.", 4);
28         lon[0] = Long.parseLong(ip[0]);
29         lon[1] = Long.parseLong(ip[1]);
30         lon[2] = Long.parseLong(ip[2]);
31         lon[3] = Long.parseLong(ip[3]);
32         long result = (lon[0]<<24) + (lon[1]<<16) + (lon[2]<<8) + (lon[3]);
33         return result;
34     }
35     
36     /**
37      * 整型转换为IP:
38      * 1.将long类型值右移24位得到第一段字符
39      * 2.将long类型值与0x00FFFFFF按位与运算,得到第二段
40      * 3.将long类型值与0x0000FFFF按位与运算,得到第三段
41      * 4.将long类型值与0x000000FF按位与运算,得到第四段
42      * 5.从第一段开始,每段拼接".",最后一段不需要拼接".",拼接结果为最终的IP字符串
43      * @param lon
44      * @return
45      */
46     public static String longToIp(long lon){
47         StringBuffer sb = new StringBuffer();
48         sb.append(lon>>24).append(".").append(((lon & 0x00FFFFFF)>>16)).append(".").append(((lon & 0x0000FFFF)>>8))
49         .append(".").append((lon & 0x000000FF));
50         System.out.print("长整型转换为字符串后>");
51         return sb.toString();
52     }
53     public static void main(String[] args) {
54         String IP = "192.168.1.109";
55         long lon = IPToLong.ipToLong(IP);
56         System.out.println(IP+"转换为整型后为>"+lon);
57         System.out.println(IPToLong.longToIp(lon));
58     }
59 }
60 
61 
62 执行结果:
63 192.168.1.109转换为整型后为>3232235885
64 长整型转换为字符串后>192.168.1.109
原文地址:https://www.cnblogs.com/celine/p/8462714.html