考虑使用16进制的加法来做,可是对java16进制加法不是很了解,
网上没有找到相关的资料,希望指教。谢谢

解决方案 »

  1.   

    这里提供一个笨方法,很多人多用过的:
    import   java.util.*; public   class   Test   { /** 
      *   @param   args 
      */ 
    public   static   void   main(String[]   args)   { 
    String   ip1   =   "192.168.5.1 "; 
    String   ip2   =   "192.168.6.254 "; for(Iterator   ipItr   =   getIPs(ip1,   ip2).iterator();   ipItr.hasNext();){ 
    System.out.println(ipItr.next()); 
    } } public   static   List   getIPs(String   ip1,   String   ip2){ String   ipOne[]   =   ip1.split( "\\. "); 
    String   ipTwo[]   =   ip2.split( "\\. "); int   intIpOne[]   =   new   int[4]; 
    int   intIpTwo[]   =   new   int[4]; 
    for(int   i   =   0;   i   <   4;   i   ++){ 
    intIpOne[i]   =   Integer.parseInt(ipOne[i]); 
    intIpTwo[i]   =   Integer.parseInt(ipTwo[i]); 
    } List   result   =   new   ArrayList(); 
    for(int   i   =   intIpOne[0];   i   <=   intIpTwo[0];   i++){ 
    for(int   j   =   intIpOne[1];   j   <=   intIpTwo[1];   j++){ 
    for(int   k   =   intIpOne[2];   k   <=   intIpTwo[2];   k++){ 
    for(int   l   =   intIpOne[3];   l   <=   intIpTwo[3];   l++){ 
    StringBuffer   ip   =   new   StringBuffer(); 
    ip.append(i).append( ". ") 
        .append(j).append( ". ") 
        .append(k).append( ". ") 
        .append(l); result.add(ip.toString()); 



    } return   result; 

      

  2.   

    ip = 4个int 你可以将它转化为一个 long 数字
    然后....
    在2个long 之间循环我想你知道了吧。。
      

  3.   

    提供你一个我以前写的IP转为long的方法,反向的你自己写写看,我就不给你了!
      public static long ipToLong(String ip) {
        String[] parts = StrTools.split(ip, ".");
        if (parts.length != 4) {
          return -1;
        }
        long rtn = 0;
        try {
          for (String part : parts) {
            rtn <<= 8;
            rtn += Integer.parseInt(part.trim());
          }
          return rtn;
        } catch (Exception ex) {
          ex.printStackTrace();
          return -1;
        }
      }
      

  4.   

    答:将IPV4转成32位无符号的数(一个IPV4是一个32位的二进制数),然后处理。
    参考代码如下:import java.net.*;
    import java.nio.*;
    public class PrintIP { //一个IP,是一个32位无符号的二进制数。故用long的低32表示无符号32位二进制数。
    public static long getIP(InetAddress ip)
    {
    byte[] b=ip.getAddress();
    long l= b[0]<<24L & 0xff000000L|
            b[1]<<16L & 0xff0000L  |
            b[2]<<8L  &  0xff00L   |
            b[3]<<0L  &  0xffL ;
    return l;
    }
    //由低32位二进制数构成InetAddress对象
    public static InetAddress toIP(long ip) throws UnknownHostException
    {
    byte[] b=new byte[4];
    int i=(int)ip;//低32位
    b[0]= (byte)( (i >> 24) & 0x000000ff );
    b[1]= (byte)( (i >> 16) & 0x000000ff );
    b[2]= (byte)( (i >> 8)  & 0x000000ff );
    b[3]= (byte)( (i >> 0)  & 0x000000ff );
    return InetAddress.getByAddress(b);
    }

    public static void main(String[] args) throws UnknownHostException {
    long ip1=getIP(InetAddress.getByName("192.168.0.233"));
    long ip2=getIP(InetAddress.getByName("192.168.1.12"));
    System.out.println("192.168.0.233到192.168.1.12之间所有的IP是:");
    for(long ip=ip1;ip<=ip2;ip++)
    {
    System.out.println(toIP(ip).getHostAddress());
    }
    }
    }
    程序运行结果:
    192.168.0.233到192.168.1.12之间所有的IP是:
    192.168.0.233
    192.168.0.234
    192.168.0.235
    192.168.0.236
    192.168.0.237
    192.168.0.238
    192.168.0.239
    192.168.0.240
    192.168.0.241
    192.168.0.242
    192.168.0.243
    192.168.0.244
    192.168.0.245
    192.168.0.246
    192.168.0.247
    192.168.0.248
    192.168.0.249
    192.168.0.250
    192.168.0.251
    192.168.0.252
    192.168.0.253
    192.168.0.254
    192.168.0.255
    192.168.1.0
    192.168.1.1
    192.168.1.2
    192.168.1.3
    192.168.1.4
    192.168.1.5
    192.168.1.6
    192.168.1.7
    192.168.1.8
    192.168.1.9
    192.168.1.10
    192.168.1.11
    192.168.1.12
    因为不知道你的需求中要不要去掉特殊的IP。故程序中没有判特殊IP。
    说明:若要去掉网络地址如:192.168.0.0,192.168.1.0,191.12.0.0,12.0.0.0与定向广播地址如:192.168.0.255,192.168.1.255,192.12.255.255,12.255.255.255等,你在程序中再判一下。