【面试题】将ip地址转换成整数

题目:将ip地址转换成整数

开始用了最粗暴的方法,将四段分别转换成二进制连接起来,然后扫描一遍,累加求和。效率太低。

假设ip地址:110.111.112.113,即为A.B.C.D,转换成整数只需要将D左移0位(不需要移动),C左移8位,B左移16位,A左移24位即可。

public class IP2Integer {

	public static void main(String[] args) {
		String ip = "110.111.112.113";
		String[] s = ip.split("\\.");
		System.out.println(Arrays.toString(s));
		long ipl = (Long.parseLong(s[0])<<24)+(Long.parseLong(s[1])<<16)
				+(Long.parseLong(s[2])<<8)+(Long.parseLong(s[3]));
		System.out.println(ipl);
	}
}

输出:1852797041

 

如果要将整数转换成ip地址,该怎么操作呢?

对于整数X=1852797041,其对应的二进制可以记为ABCD,每个字母表示8位,只需将X右移24位即可得到A,然后将X中的A部分置为0,右移16位即可得到B,同理得到C和D,用“.”连接起来即可。

public class Integer2Ip {

	public static void main(String[] args) {
		long ipl =1852797041l;
		
		long A = ipl>>24;
		long B = (ipl&0x00FFFFFF)>>16;
		long C = (ipl&0x0000FFFF)>>8;
		long D = ipl&0x000000FF;
		
		String ip = new StringBuffer().append(A).append(".").append(B).append(".")
				.append(C).append(".").append(D).toString();
		System.out.println(ip);
	}
}

结果:110.111.112.113

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值