如何在java中将ip地址的十进制表示转换为32位整数值? 我使用InetAddress类和getLocalHost方法来获取IP地址:
public class getIp {
public static void main(String[] args) {
InetAddress ipaddress;
try {
ipaddress=InetAddress.getLocalHost();
System.out.println(ipaddress);
}
catch(UnknownHostException ex)
{
System.out.println(ex.toString());
}
}
}
我应该将结果转换为32位整数值而不是字符串,我该怎么做? 谢谢!
答案 0 :(得分:5)
简单地的IP地址不是 double
值。这就像问红色的数字一样。这没有意义。
你真正尝试做什么?你有什么希望实现的?大局是什么?不管是什么,我认为你不想让double
参与其中。
答案 1 :(得分:1)
如果IP地址是IPv6,则无法使用。
否则对于Sun / Oracle实现和IPv4,您可以玩脏:
ipaddress.hashCode()
- 有效,但将来可能会中断,因此不推荐。
否则(推荐):int ipv4 = ByteBuffer.wrap(addr.getAddress()).getInt()
答案 2 :(得分:1)
如果您打算拥有ipv6地址,则应使用long而不是整数。 您可以将地址转换为单个长整数,将每个字节移入其中。
long ipNumber = 0;
for (Byte aByte : ipaddress.getAddress()) {
ipNumber = (ipNumber << 8) + aByte;
}
这适用于ipv4和ipv6地址。
答案 3 :(得分:0)
为什么不把它作为字节数组呢?
答案 4 :(得分:0)
我可能是错的,但可能是那个只想打印十六进制IP地址的男人? ;)
试试这个:
try {
InetAddress ipaddress = InetAddress.getLocalHost();
System.out.println(ipaddress);
byte[] bytes = ipaddress.getAddress();
System.out.println(String.format("Hex address: %02x.%02x.%02x.%02x", bytes[0], bytes[1], bytes[2], bytes[3]));
} catch (UnknownHostException ex) {
System.out.println(ex.toString());
}