, Una máscara de la forma: "255.255.255.0" en 24 bits, las siguientes ideas:
- La determinación de si la cadena máscara IP pasado, la forma más fácil de usar un juego regular, directa, de la siguiente manera:
java.util.regex.Matcher importación;
java.util.regex.Pattern importación;
public static boolean isMask (máscara String) {
patrón de patrón = Pattern.compile ( "(^ (\\ d {1,3} \\) {3} \\ d {1,3} $).");
java.util.regex.Pattern importación;
public static boolean isMask (máscara String) {
patrón de patrón = Pattern.compile ( "(^ (\\ d {1,3} \\) {3} \\ d {1,3} $).");
pattern.matcher (máscara) volver .matches ();
}
}
2. Analizar en un número IP, uso la idea de la máscara de plástico en, para ser conformada determinación del número 1.
2.1 IP en plástico
int public static ipToInt (String ipAddr) { if (! isMask (ipAddr))
return 0;
String [] ipArr = ipAddr.split ( "\\.");
retorno ((Integer.parseInt (ipArr [0]) y 0xFF) << 24) + ((Integer.parseInt (ipArr [1]) y 0xFF) << 16)
+ ((Integer.parseInt (ipArr [2]) y 0xFF)) << 8 + ((Integer.parseInt (ipArr [3]) y 0xFF));
}
Número 1 2.2 pares de operaciones de enteros:
staticint pública findN umberOf1 (int n)
{
int contar OF1 = 0;
int t ag = 1;
mientras que (etiqueta! = 0)
{
if ((etiqueta & N)! = 0)
contar OF1 ++;
tag = etiqueta << 1;
}
volver contar OF1;
}
En segundo lugar, los dígitos de la máscara en forma de IP, las ideas son las siguientes:
Cadena intToMask static (int máscara de bits)
{
si (máscara de bits> 32)
nula regresar;
int tmpMask [] = {0,0,0,0};
veces int = máscara de bits / 8;
int i = 0;
para (; i <veces; i ++)
{
tmpMask [i] = 255;
}
for (int j = 1; j <= 8; j ++)
{
si (j <= máscara de bits - veces * 8)
tmpMask [i] = 2 * tmpMask [i] + 1;
más
tmpMask [i] = 2 * tmpMask [i];
}
retorno Integer.toString (tmpMask [0]) + "" + Integer.toString (tmpMask [1]) + "" + Integer.toString (tmpMask [2]) + "" + Integer.toString (tmpMask [3]);
}