java如何将unsigned long 型的IP转换为字符串类型的IP??我是输入的格式10.1.1.123这样的,然后转换成int格式的存入数据库,再从数据库中取出来显示时还要是10.1.1.123这中格式我存的时候是将
ip这样处理ip.trim().split("\\.");成一个字符串数组再按照IP的格式处理成的int类型的值

解决方案 »

  1.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test6 {
        
        private final static String IPV4_REGEX = "(?:[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?:\\.(?:[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){3}";
        
        public final static Matcher IPV4_MATCHER = Pattern.compile(IPV4_REGEX).matcher("");
        
        public static void main(String[] args) {
            String str = "10.1.1.223";
            int s = ipv4ToInt(str);
            System.out.println(int4Ipv4(s));
        }
        
        public static int ipv4ToInt(String ipv4) {
            if(!IPV4_MATCHER.reset(ipv4).matches()) {
                throw new IllegalArgumentException("IPv4 format ERROR!");
            }
            String[] strs = ipv4.split("\\.");
            int result = 0;
            for(int i = 0, k = strs.length; i < k; i++) {
                result |= Integer.parseInt(strs[i]) << ((k - 1 - i) * 8);
            }
            return result;
        }
        
        public static String int4Ipv4(int ipv4Int) {
            StringBuilder sb = new StringBuilder(15);
            for(int i = 0; i < 4; i++) {
                if(i > 0) {
                    sb.append('.');
                }
                sb.append((ipv4Int >>> ((3 - i) * 8)) & 0xff);
            }
            return sb.toString();
        }
    }