Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          IP地址轉化成整數

          Posted on 2009-12-11 22:48 啥都寫點 閱讀(3098) 評論(0)  編輯  收藏 所屬分類: J2SE

           關鍵技術:

             將IP地址轉化成整數的關鍵技術點如下:

                1、通過String的indexOf方法找出IP字符串中的"."的位置
                2、根據點的位置,使用String的substring方法把IP字符串分成4段
                3、使用Long的parselong方法把子段轉化為一個3位數
                4、通過左移位操作(<<)給每一段的數字加權,第一段的權為2的24次方,第二段的權為2的16次方,第三段的權為2的8次方,最后一段的權為1.


             將整數形式的IP地址轉化成字符串的技術點如下:

                1、將整數值進行右移位操作(>>),右移24位,右移時高位補0,得到的數字即為第一段IP。
                2、通過與操作符(&)將整數值的高8位設位0,再右移16位,得到的數字即為第二段IP。
                3、通過與操作符把整數值的高16位設為0,再右移8位,得到的數字即為第三段IP。
                4、通過與操作符把整數值的高24位設為0,得到的數字即為第四段IP。
              
          public class IP2Long {
              
          //將127.0.0.1 形式的IP地址轉換成10進制整數,這里沒有進行任何錯誤處理
              public static long ipToLong(String strIP){
                   
          long[] ip=new long[4];
                   
          //先找到IP地址字符串中.的位置
                   int position1=strIP.indexOf(".");
                   
          int position2=strIP.indexOf(".",position1+1);
                   
          int position3=strIP.indexOf(".",position2+1);
                   
          //將每個.之間的字符串轉換成整型
                   ip[0]=Long.parseLong(strIP.substring(0,position1));
                   ip[
          1]=Long.parseLong(strIP.substring(position1+1,position2));
                   ip[
          2]=Long.parseLong(strIP.substring(position2+1,position3));
                   ip[
          3]=Long.parseLong(strIP.substring(position3+1));
                   
          return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3]; 
              }


              
          //將10進制整數形式轉換成127.0.0.1形式的IP地址
              public static String longToIP(long longIP){
                   StringBuffer sb
          =new StringBuffer("");
                   
          //直接右移24位
                   sb.append(String.valueOf(longIP>>>24));
                   sb.append(
          ".");          
                   
          //將高8位置0,然后右移16位
                   sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16)); 
                   sb.append(
          ".");
                   sb.append(String.valueOf((longIP
          &0x0000FFFF)>>>8));
                   sb.append(
          ".");
                   sb.append(String.valueOf(longIP
          &0x000000FF));
                   
          return sb.toString(); 
              }
           
              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  String ipStr 
          = "192.168.0.1";
                  
          long ipLong = IP2Long.ipToLong(ipStr);
                  System.out.println(
          "192.168.0.1 的整數形式為: " + ipLong);
                  System.out.println(
          "整數" + ipLong + "轉化成字符串IP地址: " 
                          
          + IP2Long.longToIP(ipLong));
                  
          //IP地址轉化成二進制形式輸出
                  System.out.println("192.168.0.1 的二進制形式為: " 
                          
          + Long.toBinaryString(ipLong));
              }

          }



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 襄城县| 东源县| 乐山市| 厦门市| 上饶市| 安庆市| 志丹县| 屏边| 长垣县| 卓资县| 和政县| 柘荣县| 沾益县| 平阴县| 东安县| 重庆市| 肃北| 和平区| 万全县| 新建县| 连城县| 淮阳县| 大余县| 天全县| 安康市| 治县。| 永丰县| 通辽市| 遵义县| 阆中市| 通化县| 麦盖提县| 天气| 富源县| 枞阳县| 噶尔县| 左权县| 息烽县| 乌兰县| 西充县| 彭阳县|