java將IP地址轉換爲數字以及逆向轉換(位運算和0xFF的使用)第二季

原文:java

http://www.mkyong.com/java/java-convert-ip-address-to-decimal-number/算法


來自同一個博客。bash


IP轉爲數字(第二種算法。用左移、按位或實現。效率比上一篇的更高。):app

[java] view plaincopy在CODE上查看代碼片派生到個人代碼片oop

<EMBED id=ZeroClipboardMovie_1 height=18 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">ui

  1. public long ipToLong(String ipAddress) {  spa

  2.   

  3. long result = 0;  .net

  4.   

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

  6.   

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

  8.   

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

  10.   

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

  12.   

  13.     //1. 192 << 24  

  14.     //1. 168 << 16  

  15.     //1. 1   << 8  

  16.     //1. 2   << 0  

  17.     result |= ip << (i * 8);  

  18.   

  19. }  

  20. return result;  

  21.  }  



數字轉爲IP,兩種算法都差很少:

[java] view plaincopy在CODE上查看代碼片派生到個人代碼片

<EMBED id=ZeroClipboardMovie_2 height=18 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1.  //ip = 3232235778  

  2.  public String longToIp(long ip) {  

  3. StringBuilder result = new StringBuilder(15);  

  4.   

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

  6.   

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

  8.   

  9.     if (i < 3) {  

  10.         result.insert(0,'.');  

  11.     }  

  12.   

  13.     ip = ip >> 8;  

  14. }  

  15. return result.toString();  

  16.  }  

  17.   

  18.  //ip = 3232235778  

  19.  public String longToIp2(long ip) {  

  20.   

  21. return ((ip >> 24) & 0xFF) + "."   

  22.     + ((ip >> 16) & 0xFF) + "."   

  23.     + ((ip >> 8) & 0xFF) + "."   

  24.     + (ip & 0xFF);  

  25.  }  


完整代碼:

[java] view plaincopy在CODE上查看代碼片派生到個人代碼片

<EMBED id=ZeroClipboardMovie_3 height=18 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. public class JavaBitwiseExample {  

  2.    

  3.     public static void main(String[] args) {  

  4.    

  5.         JavaBitwiseExample obj = new JavaBitwiseExample();  

  6.    

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

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

  9.    

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

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

  12.    

  13.     }  

  14.    

  15.     // example : 192.168.1.2  

  16.     public long ipToLong(String ipAddress) {  

  17.    

  18.         // ipAddressInArray[0] = 192  

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

  20.    

  21.         long result = 0;  

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

  23.    

  24.             int power = 3 - i;  

  25.             int ip = Integer.parseInt(ipAddressInArray[i]);  

  26.    

  27.             // 1. 192 * 256^3  

  28.             // 2. 168 * 256^2  

  29.             // 3. 1 * 256^1  

  30.             // 4. 2 * 256^0  

  31.             result += ip * Math.pow(256, power);  

  32.    

  33.         }  

  34.    

  35.         return result;  

  36.    

  37.     }  

  38.    

  39.     public long ipToLong2(String ipAddress) {  

  40.    

  41.         long result = 0;  

  42.    

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

  44.    

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

  46.    

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

  48.    

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

  50.    

  51.             // 1. 192 << 24  

  52.             // 1. 168 << 16  

  53.             // 1. 1 << 8  

  54.             // 1. 2 << 0  

  55.             result |= ip << (i * 8);  

  56.    

  57.         }  

  58.    

  59.         return result;  

  60.     }  

  61.    

  62.     public String longToIp(long i) {  

  63.    

  64.         return ((i >> 24) & 0xFF) +   

  65.                    "." + ((i >> 16) & 0xFF) +   

  66.                    "." + ((i >> 8) & 0xFF) +   

  67.                    "." + (i & 0xFF);  

  68.    

  69.     }  

  70.    

  71.     public String longToIp2(long ip) {  

  72.         StringBuilder sb = new StringBuilder(15);  

  73.    

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

  75.    

  76.             // 1. 2  

  77.             // 2. 1  

  78.             // 3. 168  

  79.             // 4. 192  

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

  81.    

  82.             if (i < 3) {  

  83.                 sb.insert(0'.');  

  84.             }  

  85.    

  86.             // 1. 192.168.1.2  

  87.             // 2. 192.168.1  

  88.             // 3. 192.168  

  89.             // 4. 192  

  90.             ip = ip >> 8;  

  91.    

  92.         }  

  93.    

  94.         return sb.toString();  

  95.     }  

  96. }  


Output:

iptoLong  : 3232235778iptoLong2 : 3232235778longToIp  : 192.168.1.2
longToIp2 : 192.168.1.2



相關文章
相關標籤/搜索