2011-02-13 9 views
0

자바에서 32 비트 정수 값으로 IP 주소의 십진수 표현을 변환하는 방법은 무엇입니까? 내가 어떻게해야합니까,Java : 32 비트 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 비트 정수 값과보다 결과를 변환해야보다 : 가 나는 IP 주소를 얻기 위해의 InetAddress 클래스와에는 getLocalHost 방법을 사용합니까? 감사합니다.

+0

@Marcelo Cantos, double은 IPv6을 수용 할 수 있으며 [사용 방법을 묻기 전에 Double.doubleToRawLongBits (d)]를 사용할 수 있습니다. 하지만 IP 주소를 두 배로 유지하는 것은 괴로운 것처럼 보이지 않습니까? – bestsss

+0

@bestsss : 아니오, 이중 (및 긴)은 64 비트 만 가지고, IPv6 주소는 각각 128 비트를가집니다. –

+0

@ Paŭlo Ebermann, 확실합니다. 당신은 하나의 더블 이상이 필요합니다. 그것은 농담이었습니다. 오케이, 잘 작동하지 않았을거야. – bestsss

답변

1

경우, 작동하지 않습니다. 그렇지 않으면 Sun/Oracle 구현 및 IPv4의 경우 더러 우면 재생할 수 있습니다. ipaddress.hashCode()-향후에 중단 될 수 있으므로 권장되지 않습니다..

그렇지 않으면 (권장) : 당신이 IPv6 주소를 가질 계획이라면, 당신은 정수의 긴 대신 사용해야합니다 int ipv4 = ByteBuffer.wrap(addr.getAddress()).getInt()

5

IP 주소는 이 아니며double입니다. 빨간 색을 묻는 것과 같습니다. 그것은 말이되지 않습니다.

무엇을하려고합니까 정말로? 달성하기를 원하는 것은 무엇입니까? 더 큰 그림은 무엇입니까? 그것이 무엇이든간에, 나는 당신이 double을 참여시키고 싶지 않다고 생각합니다.

+7

붉은 색 숫자 : 0xFF0000;) – miku

+1

@ THE MYYN : 그 표현의 하나입니다. 그러나 어떤 의미로 보편적 인 표현이 아닙니다. 빨간색에 대한 자연수는 없습니다. –

0

내가 잘못 될 수 있지만, 그 사람이 바로 프링 진수 IP 주소에 원하는 수 있습니다 ? ;)

이 시도 : IP 주소에서 IPv6입니다

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

. 주소를 하나의 long으로 변환하여 각 바이트를 그 주소로 변환 할 수 있습니다.

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

이것은 ipv4 및 ipv6 주소 모두에서 작동합니다.

+0

'long'은 64 비트 만 저장하고, IPv6에는 128이 필요합니다. – Martin

관련 문제