Java:如何将dec转换为32位int?

时间:2011-02-13 12:28:57

标签: java double decimal

如何在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位整数值而不是字符串,我该怎么做? 谢谢!

5 个答案:

答案 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());
    }