C# 获取ipv4最后八位字节的最佳方法

C# 获取ipv4最后八位字节的最佳方法,c#,ip-address,C#,Ip Address,我知道子字符串可以处理这个问题,但是,有没有更好的方法从IP获取最后一个八位组 例: 192.168.1.100 我要100 Tks这可能有些过分,但一个简单的正则表达式也可以做到这一点: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) 记住IP地址是什么,它是一个32位(4字节)的数字。因此,用子网掩码屏蔽地址实际上是正确的方法。如果您始终希望子网掩码为255.255.255.0(如您的问题所示),则可以使用0xFF获取该数字(&N) 但是,如果您不关心

我知道子字符串可以处理这个问题,但是,有没有更好的方法从IP获取最后一个八位组

例: 192.168.1.100

我要100


Tks

这可能有些过分,但一个简单的正则表达式也可以做到这一点:

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

记住IP地址是什么,它是一个32位(4字节)的数字。因此,用子网掩码屏蔽地址实际上是正确的方法。如果您始终希望子网掩码为255.255.255.0(如您的问题所示),则可以使用0xFF获取该数字(&N)

但是,如果您不关心效率,而只将地址作为字符串,那么“.”上的拆分就可以了…:)

只是为了好玩:

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

只是为了好玩,我写了一个开销最小的版本(字符串操作等)。但他有正确的答案

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;
}
static void Main(字符串[]args)
{
控制台写入线(Octetiip(“10.1.1.100”,0));
Console.ReadLine();
}
静态字节八位组ip(字符串ip,整数八位组)
{
var-octCount=0;
var结果=0;
//循环遍历每个字符。
对于(变量i=0;i255)
抛出新的FormatException();
}
}
如果(八位计数!=八位字节)
抛出新的FormatException();
返回(字节)结果;
}

这是一种按部就班的方法。你不应该按索引获取最后一个字节吗
var bytes=IPAddress.Parse(“192.168.1.33”).GetAddressBytes();var值=字节[bytes.Length-1]这将使其与IPv6等兼容。对于一个简单的问题来说,这似乎太难了。