IP地址转换成Long型数字的算法

来源:互联网 发布:snmp java 编辑:程序博客网 时间:2024/05/23 11:25

在应用程序开发中,涉及到IP地址的存储,大部分开发人员都将其存为String(或文本类型)。能否将固定格式为m.n.x.y的IP地址转换成Long型的数字呢?答案是肯定的。在数据库层面,可以直接将结果设置成表的主键,避免IP地址的重复,因为是主键,也就是表的索引了,数据库查找时会更快。

对于格式为m.n.x.y的IP地址,转换成Long型数字的算法如下:

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

使用Java语言,则这样实现:

view plain   copy
  1. private static 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语言,则这样实现:

view plain   copy
  1. private static 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; 

算法测试:

view plain   copy
  1. public static void 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

原创粉丝点击