VC的源码是这样:INT转IPstd::string intToIPAddr(uint IPAddr){     char buf[20] = "\0";     sprintf(buf, "%d.%d.%d.%d", (0X000000FF & (IPAddr >> 24)),          (0X000000FF & (IPAddr >> 16)),         (0X000000FF & (IPAddr >> 8)),         (0X000000FF & IPAddr ));     std::string ip(buf);     return ip;}求高手将其改为Java版的.感谢为盼.

解决方案 »

  1.   

    public static String converToStrIp(long argLongIp)
    throws IllegalArgumentException { int[] oMask = { 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff };
    StringBuffer szIP = new StringBuffer(); for (int i = 0; i < 4; i++) {
    long iTmp = (argLongIp & oMask[i]); iTmp >>>= (8 * (3 - i));
    if (iTmp > 255) {
    throw new IllegalArgumentException("Invalid Ip format");
    }
    szIP.append(iTmp);
    if (i == 3) {
    break;
    }
    szIP.append(".");
    }
    return szIP.toString(); }
      

  2.   

    dreamno(披着狼皮的羊):
      你写的这个方法还是有点问题,请您再测试一下。  我的当我的IP为192.168.0.111时,我将得到long值为-1062731665  而再-1062731665用你的方法还原时,会报错误。
      

  3.   

    class IP 
    {
         private static long ipToLong(String strIP)
         //将127.0.0.1 形式的IP地址转换成10进制整数
         {
              int j=0;
              int i=0;
              long [] ip=new long[4];
              int position1=strIP.indexOf(".");
              int position2=strIP.indexOf(".",position1+1);
              int position3=strIP.indexOf(".",position2+1);  
              ip[0]=Long.parseLong(strIP.substring(0,position1));
              ip[1]=Long.parseLong(strIP.substring(position1+1,position2));
              ip[2]=Long.parseLong(strIP.substring(position2+1,position3));
              ip[3]=Long.parseLong(strIP.substring(position3+1));
              return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3]; //ip1*256*256*256+ip2*256*256+ip3*256+ip4
         }
         private static String longToIP(long longIP)
         //将10进制整数形式转换成127.0.0.1形式的IP地址,在命令提示符下输入ping 3396362403L
         {
              StringBuffer sb=new StringBuffer("");
              sb.append(String.valueOf(longIP>>>24));//直接右移24位
              sb.append(".");
              sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16)); //将高8位置0,然后右移16位
              sb.append(".");
              sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
              sb.append(".");
              sb.append(String.valueOf(longIP&0x000000FF));
              sb.append(".");
              return sb.toString(); 
         } 
         public static void main(String[] args) 
         {
              System.out.println("IP地址的各种表现形式:\r\n");
              System.out.print("32位二进制形式:");
              System.out.println(Long.toBinaryString(3396362403L));
              System.out.print("十进制形式:");
              System.out.println(ipToLong("202.112.96.163"));
              System.out.print("普通形式:");
              System.out.println(longToIP(3396362403L));
         }
    }
      

  4.   

    laughsmile(海边的星空) 你这个方法和我的方法不一样,转换后的long值也不一样.public class tran 
    {
         public static String IP2Long(String strIP) {
    String[] strTemp=strIP.split("\\.");
    long IPCount1=(long)(Integer.parseInt(strTemp[0])*256*256*256
    +Integer.parseInt(strTemp[1])*256*256
    +Integer.parseInt(strTemp[2])*256
    +Integer.parseInt(strTemp[3]));
    return String.valueOf(IPCount1);
         }
    }
      

  5.   

    回复人: steedhorse(晨星) ( ) 信誉:110  2005-07-05 16:01:00  得分: 0  
     
     
       Java里没有unsigned int。
      
     
    ------------
    if(i<0)
       i+=256;
    这样就解决了unsigned int的问题了
    晨星大哥,下面就交给你了啊
      

  6.   

    呵呵,解决的办法好多。偶只是不知道楼主喜欢那一种。:P。
    因为楼主原来的函数参数就是uint,嘿嘿。
      

  7.   

    public static void main(String[] args) {
      class ArgCollector {
    private final LinkedList args = new LinkedList();
    private String format;
    ArgCollector(String format) {this.format = format;}
    ArgCollector arg(BigInteger arg) {
               args.addFirst(arg);return this;
    } String flush() {
    String ret = new MessageFormat(format).format(args.toArray());
    args.clear();
    return ret;
    } ArgCollector format(String arg) {
    format = arg;
    return this;
    };
      }  // Java 表示大数.
      int[] a = { 192, 168, 0, 243, 123, 232, 234, 112, 232, 111, 23 };  BigInteger IP = BigInteger.valueOf(1);
      BigInteger m = BigInteger.valueOf(255);
      String format = "";
      for (int i = 0; i < a.length; i++) { //构造一个超大数:520413995593885487931458753
    IP = IP.multiply(m).add(BigInteger.valueOf(a[i]));
    format += "{" + i + "}";
    if (i != a.length - 1)
    format += ".";
      }  System.out.println(IP);  ArgCollector arg = new ArgCollector(format);  for (int i = 0; i < a.length; i++) {
    BigInteger[] tmp = IP.divideAndRemainder(m); // 商在前,余在后.
    IP = tmp[0];
    System.out.println(" xx :" + tmp[1]);
    arg.arg(tmp[1]);
      }  System.out.println(arg.flush());
    }
      

  8.   

    public static String intToIPAddr(long n) {
        return (0XFF & (n >> 24)) + "." + (0XFF & (n >> 16)) + "." + (0XFF & (n >> 8)) + "." + (0XFF & n);
      }
      

  9.   

    public static String intToIPAddr(long n) {
     long longIP = -1062731665;
     StringBuffer sb=new StringBuffer("");
     sb.append(String.valueOf((longIP>>>24)&0xFF));//直接右移24位
     sb.append(".");
     sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16)); //将高8位置0,然后右移16位
     sb.append(".");
     sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
     sb.append(".");
     sb.append(String.valueOf(longIP&0x000000FF));
     sb.append(".");
     System.out.println(sb.toString());
    }
      

  10.   

    参考 laughsmile(海边的星空) 改写后的代码,解决了我的问题,非常感谢大家的支持.我把代码汇总了一下,方便大家调用.public class tran 
    {
         public static String IP2Long(String strIP) {
    String[] strTemp=strIP.split("\\.");
    long IPCount1=(long)(Integer.parseInt(strTemp[0])*256*256*256
    +Integer.parseInt(strTemp[1])*256*256
    +Integer.parseInt(strTemp[2])*256
    +Integer.parseInt(strTemp[3]));
    return String.valueOf(IPCount1);
         }
         
         public static String Long2IP(String strLong) {
           long longIP = (long)Integer.parseInt(strLong);
           StringBuffer sb=new StringBuffer("");
           sb.append(String.valueOf((longIP>>>24)&0xFF));
           sb.append(".");
           sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));
           sb.append(".");
           sb.append(String.valueOf((longIP&0x0000FFFF)>>>8));
           sb.append(".");
           sb.append(String.valueOf(longIP&0x000000FF));
           return sb.toString();
         }
         
    }