Frage Der beste Ansatz, um das letzte Oktett von ipv4 zu erhalten


Ich weiß, Teilstring kann damit umgehen, aber gibt es eine bessere Möglichkeit, das letzte Oktett von einer IP zu bekommen?

Ex.: 192.168.1.100

Ich will 100

Tks


5
2017-08-03 13:46


Ursprung


Antworten:


nur zum Spaß:

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

18
2017-08-03 13:55



Nur zum Spaß schrieb ich die Version, die am wenigsten Overhead hätte (String-Manipulation etc.). @rushui hat aber die richtige Antwort.

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;
}

1
2017-08-03 14:08



Es mag übertrieben sein, aber eine einfache Regex würde auch den Trick machen:

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

-1
2017-08-03 13:49



Merken Sie sich, was eine IP-Adresse ist, es ist eine 32-Bit (4 Byte) Nummer. Das Maskieren der Adresse mit der Subnetzmaske wäre also der richtige Weg. Wenn Sie immer eine Subnetzmaske von 255.255.255.0 wünschen, können Sie, wie Ihre Frage besagt, die Nummer mit 0xFF und die Nummer erhalten.

Aber wenn Sie sich nicht um die Effizienz kümmern und nur die Adresse als String haben, wird der Split auf "." ist in Ordnung ... :)


-1
2017-08-03 13:54