ip转数字 java_IPV6 IPV4 java 转换为数字

/**

*

* author:gaoxingliang@outlook.com

* created:2015年8月20日 下午9:31:35

*/

package blog;

import java.math.BigInteger;

/**

* @author gxl

*

*/

public class Ip2Int

{

/**

* @param args

*/

public static void main(String[] args)

{

String ipv4 = "127.255.1.1", ipv6 = "fe80:0:0:0:d48a:e3be:7d9d:ffff";

// IPV4 all 4*8 =32 bit

// java int is 32 bit but cann't store this.(it's signed.)

long k = ip2long(ipv4);

System.out.println(k);

System.out.println(Long.toBinaryString(k));

System.out.println(long2ip(k));

System.out.println("ipv6 start :" + ipv6);

BigInteger big = ipv6toInt(ipv6);

System.out.println(big.toString(16));

System.out.println(int2ipv6(big));

ipv6 = "fe80:0:0:0:d48a:e3be::ffff";

System.out.println("ipv6 start :" + ipv6);

big = ipv6toInt(ipv6);

System.out.println(big.toString(16));

System.out.println(int2ipv6(big));

}

public static long ip2long(String ipv4)

{

String[] splits = ipv4.split("\\.");

long l = 0;

l = l + (Long.valueOf(splits[0], 10)) << 24;

l = l + (Long.valueOf(splits[1], 10) << 16);

l = l + (Long.valueOf(splits[2], 10) << 8);

// yunsuanfu youxianji

l = l + (Long.valueOf(splits[3], 10));

System.out.println(Long.toBinaryString(l));

return l;

}

public static String long2ip(long l)

{

String ip = "";

ip = ip + (l >>> 24);

ip = ip + "." + ((0x00ffffff & l) >>> 16);

ip = ip + "." + ((0x0000ffff & l) >>> 8);

ip = ip + "." + (0x000000ff & l);

return ip;

}

public static BigInteger ipv6toInt(String ipv6)

{

int compressIndex = ipv6.indexOf("::");

if (compressIndex != -1)

{

String part1s = ipv6.substring(0, compressIndex);

String part2s = ipv6.substring(compressIndex + 1);

BigInteger part1 = ipv6toInt(part1s);

BigInteger part2 = ipv6toInt(part2s);

int part1hasDot = 0;

char ch[] = part1s.toCharArray();

for (char c : ch)

{

if (c == ':')

{

part1hasDot++;

}

}

// ipv6 has most 7 dot

return part1.shiftLeft(16 * (7 - part1hasDot )).add(part2);

}

String[] str = ipv6.split(":");

BigInteger big = BigInteger.ZERO;

for (int i = 0; i < str.length; i++)

{

//::1

if (str[i].isEmpty())

{

str[i] = "0";

}

big = big.add(BigInteger.valueOf(Long.valueOf(str[i], 16))

.shiftLeft(16 * (str.length - i - 1)));

}

return big;

}

public static String int2ipv6(BigInteger big)

{

String str = "";

BigInteger ff = BigInteger.valueOf(0xffff);

for (int i = 0; i < 8 ; i++)

{

str = big.and(ff).toString(16) + ":" + str;

big = big.shiftRight(16);

}

//the last :

str = str.substring(0, str.length() - 1);

return str.replaceFirst("(^|:)(0+(:|$)){2,8}", "::");

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值