IP地址与Long型整数的相互转换

  前段时间看概要设计文档发现有这么一段话,为了实现高效率的地址查找以及比对,将ip地址转化为long型存入redis进行处理balabala,具体是什么记不大清了大致就是这个意思。

  
  之前没想过这个问题,ip地址竟然还能这么搞,于是测试了一下确实可以,举个简单例子先,比如有个ip地址是169.254.85.85,对应的二进制是10101001.11111110.1010101.1010101,将小数点去掉后变为101010011111111010101011010101,可以看到除了最低的位置的整数位置没有发生变化,其他三个位置的整数分别相对原来的位置左移了8位,16位,24位,而在二进制中每左移一位,就相当于*2,也就是说对应的每段数字分别乘2的8次方,16次方以及24次方,总体来说思路就是去掉ip地址的小数点后重新计算,上面这个ip地址转化为long型整数是2852017493,当然如果你觉得这样计算比较麻烦也可以通过将每段数字转化为十六进制后拼接,之后在计算器中直接转化为十进制效果是一样的,对应的十六进制是A9FE5555

  好了明白了转化过程写代码就很简单了,直接上ip地址转化为long型整数的代码见下图

  这里写图片描述

  代码很简单这里就不用解释了。既然都写到这里了,那么整数转化为ip地址也是可以的,这里先上代码见下图

  这里写图片描述

  这里写了注释了就简单解释一下,思路就是取得每一段的数字,右移一位相当于除以2,通过将long型整数转化为二进制后与指定数量的f进行与运算,之后通过右移去掉不符合条件的位置保留所需的位置,最后用一个StringBuffer类的对象去拼接后转化为String即可。

  最后写一下主方法进行一下简单测试,见下
  这里写图片描述

  运行后控制台输出符合预期,表示成功

  这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦岚如雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值