int  i=2130706433 ;  
byte  []b=new  byte[4];  
b[3]=(byte)(i&0xff);  
b[2]=(byte)(i>>8&0xff);  
b[1]=(byte)(i>>16&0xff);  
b[0]=(byte)(i>>24&0xff); 
 
System.out.println(InetAddress.getByAddress(b).getHostAddress());
测试通过

解决方案 »

  1.   


    public class A
    {
    public static void main(String [] args)
    {
    long t=2130706433;
    byte c=127;
    byte a[]=new byte[4];
    a[3]=(byte)(t&c);
    a[2]=(byte)((t>>8)&c);
    a[1]=(byte)((t>>16)&c);
    a[0]=(byte)((t>>24)&c);
    for(int i=0;i<4;i++)
    {
    if(i!=3)
    System.out.print(a[i]+".");
    else
    System.out.print(a[i]);
    }
    }
    }
      

  2.   

    jFresH_MaN(TM)兄弟的速度,任何人都寒。^0^
      

  3.   

    谢谢楼上的各位!我在测试程序时将3232235522(192.168.0.2)进行测试,好象结果不对。
    另外,楼上给的是转化成IP地址的,有没有将IP地址转换过来的呢?
      

  4.   

    另:在mysql里有inet_ntoa/inet_aton函数进行转换,不知道oracle里有没有对应的函数。
      

  5.   

    127.0.0.1转换都没有问题,其他ip地址肯定都没有问题啊有没有将IP地址转换过来的呢?
    ----
    你的意思是不是把String转换成InetAddress类对象?
    InetAddress ip=InetAddress.getByName("127.0.0.1");oracle不清楚
      

  6.   

    不过听佩服jFresH_MaN(TM)老兄的,什么都会
      

  7.   

    THX,jFresH_MaN(TM)和楼上的老兄 。我想说的是将127.0.0.1如何转换成2130706433这个无符号数。另外byte类型的最大值是127,如果IP地址大于这个数的话,上面的程序就不正确。
      

  8.   

    我想说的是将127.0.0.1如何转换成2130706433这个无符号数。
    这个也简单啊,由字符串得到InetAddress对象
    然后getAddress()得到byte[]
    再使用上面的逆过程得到一个long型。大于127的值倒是没有注意处理,我再想象
      

  9.   

    long i=3232235522L;  
    byte  []b=new  byte[4];  
    b[3]=(byte)(i&0xff);  
    b[2]=(byte)(i>>8&0xff);  
    b[1]=(byte)(i>>16&0xff);  
    b[0]=(byte)(i>>24&0xff); 
    for(int k=0;k<b.length;k++) {
      System.out.print((b[k]<0?b[k]+256:b[k])+(k!=b.length?".":"");
    }
    测试通过,可以处理大于127的数值
    原理就是大于127的byte会做补码处理,得到的就是一个负数
    那么我判断如果这个byte是负数,就加256得到原来的数,同时也转成int来处理
      

  10.   

    steedhorse(晨星) 兄,你好一年多没有到 CSDN 来了,以前到 C、VC 去得比较多,受过你不少帮助啊,现在因为想学 JAVA 又回来了,想不到还能看到这么熟悉的马甲,有种回家的感觉
      

  11.   

    嘿嘿,copy卡卡西:
    // int i = 0;
    // byte b[] = {127,0,0,1}; 
    // i = i|1;
    // i = i|0<<8;
    // i = i|0<<16;
    // i = i|127<<24;
    // System.out.println(i); int i = 0;
    byte b[] = {192-255,168-255,0,2}; 
    i = i|1;
    i = i|0<<8;
    i = i|0<<16;
    i = i|127<<24;
    System.out.println(i);
      

  12.   

    在此给出我自己将IP转换成无符号数的傻办法。旨在抛砖玉,期望更简单的方法。
    byte []ia = InetAddress.getByName("127.0.0.1").getAddress();
    System.err.println(ia[0]<0 ? ((long)(Math.abs(129+ia[0]) << 24)+(127<<24)) : ia[0]<<24);
    System.err.println(ia[1]<0 ? ((long)(Math.abs(129+ia[1]) << 16)+(127<<16)) : ia[1]<<16);
    System.err.println(ia[2]<0 ? ((long)(Math.abs(129+ia[2]) << 8)+(127<<8)) : ia[2]<<8);
    System.err.println(ia[3]);