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地址,则只检查地址格式的有效性