欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java编程IP地址和数字相互转换代码示例

程序员文章站 2024-02-25 23:35:39
最近才知道,将ip地址转换成十进制、八进制、十六进制同样可以访问网站。 ip转为数字(第二种算法。用左移、按位或实现。效率更高。): public long i...

最近才知道,将ip地址转换成十进制、八进制、十六进制同样可以访问网站。

ip转为数字(第二种算法。用左移、按位或实现。效率更高。):

public long iptolong(string ipaddress) { 
 
long result = 0; 
 
string[] ipaddressinarray = ipaddress.split("\\."); 
 
for (int i = 3; i >= 0; i--) { 
 
  long ip = long.parselong(ipaddressinarray[3 - i]); 
 
  //left shifting 24,16,8,0 and bitwise or 
 
  //1. 192 << 24 
  //1. 168 << 16 
  //1. 1  << 8 
  //1. 2  << 0 
  result |= ip << (i * 8); 
 
} 
return result; 
 } 

数字转为ip,两种算法都差不多:

//ip = 3232235778 
 public string longtoip(long ip) { 
stringbuilder result = new stringbuilder(15); 
 
for (int i = 0; i < 4; i++) { 
 
  result.insert(0,long.tostring(ip & 0xff)); 
 
  if (i < 3) { 
    result.insert(0,'.'); 
  } 
 
  ip = ip >> 8; 
} 
return result.tostring(); 
 } 
 
 //ip = 3232235778 
 public string longtoip2(long ip) { 
 
return ((ip >> 24) & 0xff) + "."  
  + ((ip >> 16) & 0xff) + "."  
  + ((ip >> 8) & 0xff) + "."  
  + (ip & 0xff); 
 } 

完整代码:

public class javabitwiseexample { 
  
  public static void main(string[] args) { 
  
    javabitwiseexample obj = new javabitwiseexample(); 
  
    system.out.println("iptolong : " + obj.iptolong("192.168.1.2")); 
    system.out.println("iptolong2 : " + obj.iptolong2("192.168.1.2")); 
  
    system.out.println("longtoip : " + obj.longtoip(3232235778l)); 
    system.out.println("longtoip2 : " + obj.longtoip2(3232235778l)); 
  
  } 
  
  // example : 192.168.1.2 
  public long iptolong(string ipaddress) { 
  
    // ipaddressinarray[0] = 192 
    string[] ipaddressinarray = ipaddress.split("\\."); 
  
    long result = 0; 
    for (int i = 0; i < ipaddressinarray.length; i++) { 
  
      int power = 3 - i; 
      int ip = integer.parseint(ipaddressinarray[i]); 
  
      // 1. 192 * 256^3 
      // 2. 168 * 256^2 
      // 3. 1 * 256^1 
      // 4. 2 * 256^0 
      result += ip * math.pow(256, power); 
  
    } 
  
    return result; 
  
  } 
  
  public long iptolong2(string ipaddress) { 
  
    long result = 0; 
  
    string[] ipaddressinarray = ipaddress.split("\\."); 
  
    for (int i = 3; i >= 0; i--) { 
  
      long ip = long.parselong(ipaddressinarray[3 - i]); 
  
      // left shifting 24,16,8,0 and bitwise or 
  
      // 1. 192 << 24 
      // 1. 168 << 16 
      // 1. 1 << 8 
      // 1. 2 << 0 
      result |= ip << (i * 8); 
  
    } 
  
    return result; 
  } 
  
  public string longtoip(long i) { 
  
    return ((i >> 24) & 0xff) +  
          "." + ((i >> 16) & 0xff) +  
          "." + ((i >> 8) & 0xff) +  
          "." + (i & 0xff); 
  
  } 
  
  public string longtoip2(long ip) { 
    stringbuilder sb = new stringbuilder(15); 
  
    for (int i = 0; i < 4; i++) { 
  
      // 1. 2 
      // 2. 1 
      // 3. 168 
      // 4. 192 
      sb.insert(0, long.tostring(ip & 0xff)); 
  
      if (i < 3) { 
        sb.insert(0, '.'); 
      } 
  
      // 1. 192.168.1.2 
      // 2. 192.168.1 
      // 3. 192.168 
      // 4. 192 
      ip = ip >> 8; 
  
    } 
  
    return sb.tostring(); 
  } 
} 

总结

以上就是本文关于java编程ip地址和数字相互转换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出!