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