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
对于格式为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
相关文章推荐
- IP地址转换成Long型数字的算法
- 算法:数字转换为中文
- PHP中IP地址与整型数字互相转换详解
- IP地址和数字之间转化的算法
- PHP中IP地址与整型数字互相转换详解
- 算法题--阿拉伯数字转换成英文数字
- JAVA IP地址相关:用Java来获取访问者真实的IP地址,IP地址转化成long型数的算法 .
- C#小写数字金额转换成大写人民币金额的算法
- 《IP地址和数字之间转化的算法》
- java实现 阿拉伯数字转换为汉字数字 算法
- 将阿拉伯数字转换成中文大写的好算法
- [算法题] 人民币大小写转换(阿拉伯数字和汉字转换)
- 阿拉伯数字 转换为 汉字数字 算法实现
- leetcode 罗马数字与整数的转换算法
- 字符编号转换成数字编号的算法实现
- JAVA IP地址相关:用Java来获取访问者真实的IP地址,IP地址转化成long型数的算法
- 将Android String中的大写汉字数字转换为int或long型数字
- .NET把小写数字金额转换成大写人民币金额的两种算法
- Java编程IP地址和数字相互转换代码示例
- ip地址与Long型数据进行相互转换--->移位形式, 可能更好理解!