Java 如何将ipv6字符串地址转换为16字节?

Java 如何将ipv6字符串地址转换为16字节?,java,Java,我想使用InetAddress.getByAddress(byte[])创建InetAddress,以避免查找。 我的Ipv6地址类似于fe80::59eb:9920:1139:6dd3%4或fe80:0000:0000:0000:59eb:9920:1139:6dd3%4 根据java文档,它应该是16字节,有8个块。似乎每个块都应该转换为2个字节,如何转换 我检查了以下链接 他们建议像这样做 InetAddress a = InetAddress.getByName("2001:0DB8

我想使用
InetAddress.getByAddress(byte[])
创建
InetAddress
,以避免查找。 我的Ipv6地址类似于
fe80::59eb:9920:1139:6dd3%4
fe80:0000:0000:0000:59eb:9920:1139:6dd3%4
根据java文档,它应该是16字节,有8个块。似乎每个块都应该转换为2个字节,如何转换

我检查了以下链接

他们建议像这样做

  InetAddress a = InetAddress.getByName("2001:0DB8:AC10:FE01:0000:0000:0000:0000");
    byte[] bytes = a.getAddress();
这没有帮助,因为
InetAddress.getByName()
将执行查找,并且可能会阻止正确的

更新:

我对java是个新手。我猜

16字节,所以

在128二进制格式中,ipv6地址的每个字符(从左到右或从右到左??)都添加了“|”。然后将获得输出

在128位二进制格式中,左移到所有字符类型

示例: (f) 0000(e)0000(8)0000(0)0000等


我不确定。我对这个概念比较困惑

不,你错了。建议的方法正确且有效

    InetAddress a = InetAddress.getByName("fe80::59eb:9920:1139:6dd3%4");
    byte[] bytes = a.getAddress();
    System.out.println(Arrays.toString(bytes));
输出为:

[2、-128、0、0、0、0、0、89、-21、-103、32、17、57、109、-45]

如果您给
getByName()
一个IP名称(如
ajax.com
),它将执行IP查找。如果您像代码示例中那样给它IP号,它不会。从那时起,文件:

如果提供了文字IP地址,则仅验证地址的有效性 格式已检查

()


输出中的负数可能令人惊讶。在Java中,字节总是有符号的数字。因此,我们可能认为介于128和255之间(含128和255)的字节会显示为-128到-1。

不,你错了。建议的方法正确且有效

    InetAddress a = InetAddress.getByName("fe80::59eb:9920:1139:6dd3%4");
    byte[] bytes = a.getAddress();
    System.out.println(Arrays.toString(bytes));
输出为:

[2、-128、0、0、0、0、0、89、-21、-103、32、17、57、109、-45]

如果您给
getByName()
一个IP名称(如
ajax.com
),它将执行IP查找。如果您像代码示例中那样给它IP号,它不会。从那时起,文件:

如果提供了文字IP地址,则仅验证地址的有效性 格式已检查

()


输出中的负数可能令人惊讶。在Java中,字节总是有符号的数字。因此,我们可能认为介于128和255之间(含128和255)的字节显示为-128到-1。

您的预期输出是什么?@MOnkey i updated questionFrom:“如果提供了文字IP地址,则只检查地址格式的有效性。”您的预期输出是什么?@MOnkey i updated questionFrom:如果提供了文字IP地址,则只检查地址格式的有效性