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

来源:爱站网时间:2021-09-16编辑:网友分享
由于要避免查找,我想使用InetAddress.getByAddress(byte [])创建InetAddress。我的Ipv6地址就像fe80 :: 59eb:9920:1139:6dd3%4或fe80:0000:0000:0000:59eb:9920:1139:6dd3%4一样,都是按照...

问题描述


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

我在链接Java IPv6 Address String to Bytes之后检查了

他们建议这样做

  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("2001:0DB8:AC10:FE01:0000:0000:0000:0000");
      byte[] bytes = a.getAddress();
      System.out.println(Arrays.toString(bytes));

输出为:

[[32,1,13,-72,-84,16,-2,1,0,0,0,0,0,0,0,0]

如果给getByName()提供IP名称(例如ajax.com),它将执行IP查找。如果您按照代码示例的方式提供IP地址,则不会。从此文档:

如果提供原义IP地址,则仅地址的有效性格式已检查。

([Documentation of InetAddress.getByName()

输出中的负数可能会令人惊讶。在Java中,字节始终是带符号的数字。因此,我们可能认为介于128到255之间的字节为-128到-1。

上一篇:在对象创建时将UUID生成为ID,而不是使用@GeneratedValue

下一篇:我如何自定义预定义的骆驼组件?

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载