2011-02-13 92 views
0

如何將一個IP地址的十進制表示轉換爲java中的32位整數值? 我使用InetAddress類和方法的getLocalHost獲得IP地址:Java:如何將dec轉換爲32bit int?

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

@Marcelo Cantos,double可以容納IPv6 [並且在你問你將如何使用它之前:Double.doubleToRawLongBits(d)]。但是讓IP地址增加一倍看起來很怪,不是嗎? – bestsss 2011-02-13 13:01:22

+0

@bestsss:不,雙(長)只有64位,IPv6地址每個都有128位。 – 2011-02-13 14:06:56

+0

@PaŭloEbermann,當然是。你需要超過一倍,這應該是一個笑話;好吧,我猜工作不好。 – bestsss 2011-02-13 14:14:44

回答

1

如果IP地址是IPv6的,它不會工作。 否則對於Sun/Oracle實施和IPv4,可以播放髒: ipaddress.hashCode() - 作品可能會在未來破解,因此不建議使用

否則(推薦):int ipv4 = ByteBuffer.wrap(addr.getAddress()).getInt()

5

一個IP地址只是不是 a double值。這就像問紅色的數字。這沒有意義。

你在做什麼真的試圖做什麼?你希望達到什麼目的?什麼是更大的圖片?無論如何,我不認爲你想要參與double

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

如果您計劃IPv6地址,應該長改用整數。 您可以將地址轉換爲單個長整數,將每個字節移入其中。

long ipNumber = 0; 
for (Byte aByte : ipaddress.getAddress()) { 
    ipNumber = (ipNumber << 8) + aByte; 
} 

這將適用於ipv4和ipv6地址。