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

最近才知道,将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地址和数字相互转换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值