2011-08-03 9 views
5

मैं इस संभाल कर सकते हैं सबस्ट्रिंग जानते हैं, लेकिन, वहाँ एक आईपी से अंतिम ऑक्टेट पाने के लिए एक बेहतर तरीका है?बेस्ट दृष्टिकोण आईपीवी 4 अंतिम ऑक्टेट पाने के लिए

पूर्व .: 192.168.1.100

मैं चाहता हूँ 100

Tks

उत्तर

16
सिर्फ मनोरंजन के लिए

:

Console.WriteLine(IPAddress.Parse("192.168.1.33").GetAddressBytes()[3]); 
+2

यह * * वैसे-पुस्तक यह करने के लिए है। – LukeH

+0

आपको सूचकांक द्वारा अंतिम बाइट प्राप्त नहीं करना चाहिए? । 'वर बाइट्स = IPAddress.Parse (" 192.168.1.33 ") GetAddressBytes(); var value = बाइट्स [बाइट्स। लम्बाई - 1]; 'यह आईपीवी 6 इत्यादि को संगत करेगा। –

+0

1+ ipv4 या ipv6 यह तरीका है .... – Damith

-1

यह overkill हो सकता है लेकिन एक साधारण regex भी चाल करना होगा:

(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) 
+0

यह एक साधारण समस्या के लिए बहुत अधिक लगता है। –

-1

याद रखें आईपी ​​पता क्या है, यह 32-बिट (4 बाइट) संख्या है। तो सबनेट मास्क के साथ पते को मास्क करना वास्तव में ऐसा करने का सही तरीका होगा। आप हमेशा की तरह, 255.255.255.0 के सबनेट मास्क चाहते हैं के रूप में अपने प्रश्न का तात्पर्य, आप 0xFF साथ नंबर & संख्या प्राप्त कर सकते हैं।

लेकिन, यदि आप दक्षता के बारे में परवाह नहीं है, और केवल एक स्ट्रिंग, पर विभाजन के रूप में पता नहीं है। "" ठीक है ... :)

1

बस मस्ती के लिए मैं संस्करण है जो कम से कम भूमि के ऊपर (स्ट्रिंग परिवर्तन आदि) के लिए होता है लिखा था। @rushui हालांकि सही जवाब है।

static void Main(string[] args) 
{ 
    Console.WriteLine(OctetInIP("10.1.1.100", 0)); 
    Console.ReadLine(); 
} 

static byte OctetInIP(string ip, int octet) 
{ 
    var octCount = 0; 
    var result = 0; 

    // Loop through each character. 
    for (var i = 0; i < ip.Length; i++) 
    { 
     var c = ip[i]; 

     // If we hit a full stop. 
     if (c == '.') 
     { 
      // Return the value if we are on the correct octet. 
      if (octCount == octet) 
       return (byte)result; 
      octCount++; 
     } 
     else if (octCount == octet) 
     { 
      // Convert the current octet to a number. 
      result *= 10; 
      switch (c) 
      { 
       case '0': break; 
       case '1': result += 1; break; 
       case '2': result += 2; break; 
       case '3': result += 3; break; 
       case '4': result += 4; break; 
       case '5': result += 5; break; 
       case '6': result += 6; break; 
       case '7': result += 7; break; 
       case '8': result += 8; break; 
       case '9': result += 9; break; 
       default: 
        throw new FormatException(); 
      } 

      if (result > 255) 
       throw new FormatException(); 
     } 
    } 

    if (octCount != octet) 
     throw new FormatException(); 

    return (byte)result; 
} 
संबंधित मुद्दे