• 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
  • 相关阅读:
    关于CSDN指针讨论的心得
    VC++ 6.0 与VS2008 C++ DEBUG工具(Windows)介绍
    VC++ 申明静态变量的注意事项
    大家好,我是新的blue1000~
    [讨论]当我采用动态sql绑定datagrid分页的时候,遇到的问题
    我与Google有个对话
    [BK专访]一切以客户为中心,其它一切纷至沓来
    [译]在.net中使用GDI+来提高gif图片的保存画质
    微软能不能别这样坑爹啊,即使不中毒,也伤不起啊
    长见识!1021字节javascript写成的3D圣诞树
  • 原文地址:https://www.cnblogs.com/celine/p/8462714.html
Copyright © 2020-2023  润新知