私は部分文字列がこれを処理できることは知っていますが、IPから最後のオクテットを取得する良い方法はありますか?ipv4の最後のオクテットを取得する最良の方法
例: 私が欲しい192.168.1.100
TKS
私は部分文字列がこれを処理できることは知っていますが、IPから最後のオクテットを取得する良い方法はありますか?ipv4の最後のオクテットを取得する最良の方法
例: 私が欲しい192.168.1.100
TKS
だけで結構です。
Console.WriteLine(IPAddress.Parse("192.168.1.33").GetAddressBytes()[3]);
それはやり過ぎかもしれないが、簡単な正規表現もトリックだろう:
(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})
これは単純な問題ではあまりにも多いようです。 –
覚えているがIPアドレスは32ビット(4バイト)の番号です。したがって、サブネットマスクを使用してアドレスをマスクすることは、実際には正しい方法です。あなたの質問にあるように、常に255.255.255.0のサブネットマスクが必要な場合は、&の番号を取得するために0xFFの数字を使用できます。
しかし、効率性を気にせずにアドレスを文字列として扱うだけであれば、 "。 ...ちょうど楽しみのために:)
楽しみのためだけに、私は(などの文字列操作)以上のオーバーヘッドを持っているでしょうバージョンを書きました。しかし@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;
}
これは* by *本の方法です。 – LukeH
インデックスで最後のバイトを取得してはいけませんか? 'var bytes = IPAddress.Parse(" 192.168.1.33 ")。GetAddressBytes(); var value = bytes [bytes.Length - 1]; 'これはIPv6などと互換性があります。 –
1 + ipv4またはipv6これは方法です.... – Damith