将“ IPV6”地址转换为Java中的十六进制

问题描述 投票:-1回答:1

我想将Ipv6地址转换为如下所示的格式:

IPv6:254.128.0.0.0.0.0.0.0.0.0.0.28.219.80.177

十六进制值:fe80 :: 1cdb:50b1 / 64

(获得-的结果:http://www.gestioip.net/cgi-bin/subnet_calculator.cgi]

代码:

str = value.toString(16);
int len = str.length();
while(len < 32) {
    str = "0" + str;
    len++;
}
addrStr = new IPAddressString(str);
System.out.println(addrStr.getAddress());

请让我知道用Java获取以上输出的过程是什么

java java-8 hex ip-address ipv6
1个回答
0
投票
String dottedToColons(String ipv6) {
    if (ipv6.contains(".")) {
        String[] bytes = ipv6.split("\\.");
        if (bytes.length != 16) {
            throw new IllegalArgumentException("16 numbers expected i.o. " + bytes.length);
        }
        StringBuilder words = new StringBuilder();
        for (int i = 0; i < 8; ++i) {
            int b0 = Integer.parseInt(bytes[2*i]);
            int b1 = Integer.parseInt(bytes[2*i + 1]);
            String word = Integer.toHexString((b0 << 8) | b1);
            if (i != 0) {
                words.append(':');
            }
            words.append(word);
        }
        ipv6 = words.toString.replaceFirst("(\\:0)+\\:", "::") + "/64";
    }
    return ipv6;
}
© www.soinside.com 2019 - 2024. All rights reserved.