IP地址存储转换
来源:互联网 发布:三星共和国 知乎 编辑:程序博客网 时间:2024/05/18 03:30
package com.ap.Str;/** * 这是一个关于IP地址高效存储的问题 * 对于一个IP地址如:255.255.255.255, * 如果在数据库中进行存储时最少需要varchar(15)来进行存储, * 并且在这种字符串存储时如果想要做 * select ip from t_ip where ip between '192.168.11.1' and '192.168.11.150' , * 当末尾ip地址最后一位为三位数时,此时就查询不出数据了。 * 如何解决这一问题呢? * 我们可以把IP地址转换为数值类型: * 因为他们都遵循一个转换算法:A*256*256*256+B*256*256+C*256+D的算法 * 转换之后既能解决高效存储问题,也能解决IP范围比较的问题 * 这个在MySql数据库中可以通过INET_ATON、 INET_NTOA来实现 * 下面是自己实现。 * @author min * */public class IPtoLong {/** * 将IP地址转换为数值类型 * @param ipStr * @return * @throws Exception */public static long ipToLong(String ipStr) throws Exception{long result = 0;if(ipStr != null && ipStr.length() > 0){String[] ip = ipStr.split("\\.");if(ip.length != 4){throw new Exception("IP Format Error");}for(int i = 0; i < ip.length; i++){int temp = Integer.parseInt(ip[i]);result += temp * (1L<<(ip.length - i - 1) * 8);}}else{throw new Exception("IP Format Error");}return result;}/** * 将数值类型的IP地址转换回点分十进制表示的字符串类型 * @param longIP * @return * @throws Exception */public static String longToIP(long longIP) throws Exception{if(longIP < 0){throw new Exception("Can not to IP...");}StringBuffer ipStr = new StringBuffer("");//直接右移24位ipStr.append(String.valueOf(longIP >>> 24));ipStr.append(".");//将高8位置0,然后右移16位ipStr.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16));ipStr.append(".");//将高16位置0,然后右移8位ipStr.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));ipStr.append(".");//将高24位置0ipStr.append(String.valueOf((longIP & 0x000000FF)));return ipStr.toString();}public static void main(String[] args) {// TODO Auto-generated method stubString ip = "192.168.123.123";try {long ipLong = ipToLong(ip);System.out.println("ipLong: " + ipLong);String ipStr = longToIP(ipLong);System.out.println("ipStr: " + ipStr);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
0 0
- IP地址存储转换
- IP地址在mysql的存储(IP地址和int的转换)
- IP地址存储问题
- IP地址转换算法
- IP地址的转换
- IP地址格式转换
- python ip地址转换
- java ip地址转换
- ip地址转换函数
- IP地址转换函数:
- IP地址转换
- 域名IP地址转换
- IP地址转换函数
- IP地址转换函数
- IP地址的转换
- python ip地址转换
- IP地址格式转换
- python转换IP地址
- shell编程——sed用法之参数详解
- How can I fix a locale warning from perl?
- Oracle expdp为什么比exp快,原理是什么
- 做研究的八个层次
- 预处理器指令 #include 、 #define
- IP地址存储转换
- 生活常用功能数据接口API
- shell中exec命令
- 【Linux开发】linux线程同步方式信号量介绍及实例
- Unity UGUI 父对象的透明度能直接影响到子对象的显示
- 跨平台移动端开发框架NativeScript 发布正式版本
- 类似微信的联系人根据字母排列查询
- iOS工程中的info.plist文件的完整研究
- 程序员应该具备的十个代码习惯