1. 程式人生 > >IP地址轉換成Long型數字的演算法

IP地址轉換成Long型數字的演算法

在應用程式開發中,涉及到IP地址的儲存,大部分開發人員都將其存為String(或文字型別)。能否將固定格式為m.n.x.y的IP地址轉換成Long型的數字呢?答案是肯定的。在資料庫層面,可以直接將結果設定成表的主鍵,避免IP地址的重複,因為是主鍵,也就是表的索引了,資料庫查詢時會更快。

對於格式為m.n.x.y的IP地址,轉換成Long型數字的演算法如下:

  1. Long ipLong = 256 * 256 * 256 * m + 
  2.               256 * 256 * n + 
  3.               256 * x + 
  4.               y 

使用Java語言,則這樣實現:

  1. privatestatic Long setIP(String ipaddr) {  
  2.     String ip[] = ipaddr.split("\\.");  
  3.     Long ipLong = 256 * 256 * 256 * Long.parseLong(ip[0]) +  
  4.                   256 * 256 * Long.parseLong(ip[1]) +  
  5.                   256 * Long.parseLong(ip[2]) +  
  6.                   Long.parseLong(ip[3]); 
  7.     return ipLong;  
  8. }  

那麼,對於已知的一個表示IP地址的Long型數字,又該如何將其還原成String(字元型)的IP地址呢?演算法也很簡單,整除和取餘。使用Java語言,則這樣實現:

  1. privatestatic String getIP(Long ipaddr) { 
  2.     long y = ipaddr % 256
  3.     long m = (ipaddr - y) / (256 * 256 * 256); 
  4.     long n = (ipaddr - 256 * 256 *256 * m - y) / (256 * 256); 
  5.     long x = (ipaddr - 256 * 256 *256
     * m - 256 * 256 *n - y) / 256
  6.     return m + "." + n + "." + x + "." + y; 

演算法測試:

  1. publicstaticvoid main(String[] args) { 
  2.     Long ipLong = setIP("183.62.169.146"); 
  3.     System.out.println(ipLong); 
  4.     System.out.println(getIP(ipLong)); 

結果:

3074337170

183.62.169.146