当前位置:  开发笔记 > 编程语言 > 正文

Java:将int转换为InetAddress

如何解决《Java:将int转换为InetAddress》经验,为你挑选了2个好方法。

我有一个int网络字节顺序的IP地址,我想转换为一个InetAddress对象.我看到有一个InetAddress构造函数需要一个byte[],是否有必要将其转换intbyte[]第一个,还是有另一种方式?



1> 小智..:

经过测试和工作:

int ip  = ... ;
String ipStr = 
  String.format("%d.%d.%d.%d",
         (ip & 0xff),   
         (ip >> 8 & 0xff),             
         (ip >> 16 & 0xff),    
         (ip >> 24 & 0xff));


这将以错误的顺序转换字节。它适用于little-endian int,但问题是关于“网络字节顺序”的,就像Java中的int一样,它是big-endian。正确的顺序是:`String.format(“%d。%d。%d。%d”,(ip >> 24&0xff),(ip >> 16&0xff),(ip >> 8&0xff) ,(ip&0xff));`

2> skaffman..:

这应该工作:

int ipAddress = ....
byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);

您可能必须交换字节数组的顺序,我无法弄清楚数组是否将以正确的顺序生成.


0.127.255.255和255.128.0.0 - - 将用于地址在0.0.0.0范围内无法正常工作255.255.255.255:`bytes`将有不到4元
危险的。不起作用,例如对于0.0.0.0。不可靠的!
确实确实仍然需要交换字节数组的顺序。但是,事实证明我的输入毕竟是按主机顺序输入的!谢谢。
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有