2011-06-14 18 views
8

मैं सोच रहा हूं कि DhcpInfo.ipAddress से मानव पठनीय आईपी एड्रेस कैसे प्राप्त करें? इसके बारे में मुश्किल बात यह है कि यह एक पूर्णांक है और जाहिर है कि आप एक पूर्णांक में एक आईपी पता स्टोर नहीं कर सकते हैं। तो, आईपी पता कैसे एन्कोड किया गया है, कि इसे एक int में संग्रहीत किया जा सकता है? प्रलेखन इस समस्या का कोई मदद नहीं देता: :-)मानव पठनीय DhcpInfo.ipAddress?

उत्तर

5

स्पष्ट रूप से आप एक पूर्णांक

वास्तव में एक आईपी पता संग्रहीत नहीं कर सकता http://developer.android.com/reference/android/net/DhcpInfo.html#ipAddress धन्यवाद, कि सभी एक आईपी है (v4) पता है - एक 32-बिट पूर्णांक (या 128-बिट, आईपीवी 6 के मामले में)।

"मानव-पठनीय" प्रारूप जिसके बारे में आप बात कर रहे हैं उसे पूर्णांक के बिट्स को 8 "ऑक्टेट्स" समूहों में विभाजित करके और आधार 10 में परिवर्तित करके उत्पादित किया जाता है। "192.168.0.1"।

11000000 10101000 00000000 00000001 

कौन सा दशमलव पूर्णांक ३२३२२३५५२१ से मेल खाती है:

इस पते के टुकड़े के रूप में (पठनीयता के लिए जोड़ा रिक्त स्थान) इस प्रकार होगा।

+0

धन्यवाद, मुझे स्पष्ट रूप से मानव पठनीय प्रारूप में भी उपयोग किया जाता है ;-) –

8

आप वास्तव में कर सकते हैं।

आईपी पता int के रूप में है: AABBCCDD और मानव-पठनीय रूप में यह AA.BB.CC.DD है लेकिन दशमलव आधार में। जैसा कि आप देखते हैं कि आप बिटवाई ऑपरेशंस का उपयोग करके या int से बाइट सरणी को परिवर्तित करके आसानी से निकाल सकते हैं।

चित्र देखें:

enter image description here

+0

भयानक ग्राफिक यह चित्रित करता है, धन्यवाद! बस कामना की, यह एंड्रॉइड दस्तावेज में शामिल किया जाएगा। –

5

अन्य पोस्टर से उल्लेख किया है, एक आईपी पता 4 बाइट है कि एक पूर्णांक के लिए पैक किया जा सकता है। एंड्री ने एक अच्छा चित्र दिखाया कि कैसे। यदि आप इसे InetAddress ऑब्जेक्ट में संग्रहीत करते हैं तो आप मानव पठनीय संस्करण प्राप्त करने के लिए ToString() का उपयोग कर सकते हैं। कुछ की तरह:

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray(); 
InetAddress address = InetAddress.getByAddress(bytes); 
String s = address.ToString(); 
+2

दुर्भाग्यवश आईपी पता गलत क्रम में है, उदा। 1 9 2.168.101.102 102.101.168.1 9 2 के रूप में उत्पादन होगा। कम से कम WifiInfo.getIPAddress() का उपयोग कर। इसके बजाय बाइट रूपांतरण (उत्तर द्वारा) ऐस का उपयोग करें। –

7

उपयोग इस समारोह NetworkUtils.java \ चौखटे \ आधार \ कोर \ जावा \ एंड्रॉयड \ शुद्ध)

public static InetAddress intToInetAddress(int hostAddress) { 
    byte[] addressBytes = { (byte)(0xff & hostAddress), 
          (byte)(0xff & (hostAddress >> 8)), 
          (byte)(0xff & (hostAddress >> 16)), 
          (byte)(0xff & (hostAddress >> 24)) }; 

    try { 
     return InetAddress.getByAddress(addressBytes); 
    } catch (UnknownHostException e) { 
     throw new AssertionError(); 
    } 
} 
0

सिर्फ IPADDRESS जो आप बाइट में प्राप्त रिवर्स

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray(); 
ArrayUtils.reverse(bytes); 
// then 
InetAddress myaddr = InetAddress.getByAddress(ipAddress); 
String ipString = myaddr.getHostAddress();