Sé que la subcadena puede manejar esto pero, ¿hay una mejor manera de obtener el último octeto desde una IP?Mejor enfoque para obtener ipv4 último octeto
Ej .: 192.168.1.100
quiero 100
Tks
Sé que la subcadena puede manejar esto pero, ¿hay una mejor manera de obtener el último octeto desde una IP?Mejor enfoque para obtener ipv4 último octeto
Ej .: 192.168.1.100
quiero 100
Tks
sólo por diversión:
Console.WriteLine(IPAddress.Parse("192.168.1.33").GetAddressBytes()[3]);
Puede ser una exageración, pero una expresión regular sencilla también haría el truco:
(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})
Esto parece demasiado por un problema simple. –
Recuerde qué es una dirección IP, es un número de 32 bits (4 bytes). Así que enmascarar la dirección con la máscara de subred sería la forma correcta de hacerlo. Si siempre quiere una máscara de subred de 255.255.255.0, como lo implica su pregunta, puede & el número con 0xFF para obtener el número.
Pero, si no le importa la eficiencia, y solo tiene la dirección como una cadena, la división en "." está bien ... :)
Sólo por diversión que escribió la versión que tendría la menor sobrecarga (manipulación de cadenas, etc.). @rushui tiene la respuesta correcta.
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;
}
Este * es * la manera de hacerlo por el libro. – LukeH
¿no debería obtener el último byte por índice? 'var bytes = IPAddress.Parse (" 192.168.1.33 "). GetAddressBytes(); var value = bytes [bytes.Length - 1]; 'Esto lo haría compatible con IPv6, etc. –
1+ ipv4 o ipv6 este es el camino .... – Damith