您的位置:首页 > 编程语言 > Java开发

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

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

对于格式为m.n.x.y的IP地址,转换成Long型数字的算法如下:
view plain   copyLong ipLong = 256 * 256 * 256 * m + 
              256 * 256 * n + 
              256 * x + 
              y 

使用Java语言,则这样实现:
view plain   copyprivate static Long setIP(String ipaddr) {  
    String ip[] = ipaddr.split("\\.");  
    Long ipLong = 256 * 256 * 256 * Long.parseLong(ip[0]) +  
                  256 * 256 * Long.parseLong(ip[1]) +  
                  256 * Long.parseLong(ip[2]) +  
                  Long.parseLong(ip[3]); 
    return ipLong;  
}  

那么,对于已知的一个表示IP地址的Long型数字,又该如何将其还原成String(字符型)的IP地址呢?算法也很简单,整除和取余。使用Java语言,则这样实现:
view plain   copyprivate static String getIP(Long ipaddr) { 
    long y = ipaddr % 256; 
    long m = (ipaddr - y) / (256 * 256 * 256); 
    long n = (ipaddr - 256 * 256 *256 * m - y) / (256 * 256); 
    long x = (ipaddr - 256 * 256 *256 * m - 256 * 256 *n - y) / 256; 
    return m + "." + n + "." + x + "." + y; 


算法测试:
view plain   copypublic static void main(String[] args) { 
    Long ipLong = setIP("183.62.169.146"); 
    System.out.println(ipLong); 
    System.out.println(getIP(ipLong)); 


结果:

3074337170

183.62.169.146
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息