Java:将int转换为InetAddress

kdt*_*kdt 29 java inetaddress

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

小智 27

经过测试和工作:

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

  • 这将以错误的顺序转换字节。它适用于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认同)

ska*_*man 12

这应该工作:

int ipAddress = ....
byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);
Run Code Online (Sandbox Code Playgroud)

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

  • 0.127.255.255和255.128.0.0 - - 将用于地址在0.0.0.0范围内无法正常工作255.255.255.255:`bytes`将有不到4元 (11认同)
  • 危险的。不起作用,例如对于0.0.0.0。不可靠的! (3认同)
  • 确实确实仍然需要交换字节数组的顺序。但是,事实证明我的输入毕竟是按主机顺序输入的!谢谢。 (2认同)