rápida y sucia conversión:
"255.255.255.0".split(".").map { |e| e.to_i.to_s(2).rjust(8, "0") }.join.count("1").split(".")
=> I dividió máscara en una matriz
.map { |e| e.to_i.to_s(2).rjust(8, "0") }
=> Para cada elemento en Array:
.to_i
=> Convertir en número entero
.to_s(2)
=> Convertir entero en binario
.rjust(8, "0")
=> Añadir el relleno
=> Mapa devolver una matriz con el mismo cardinalidad
.join
=> Convertir matriz en una cadena completa
.count("1")
=> Count "1" caracteres => Dar CIDR mask
def mask_2_ciddr mask
"/" + mask.split(".").map { |e| e.to_i.to_s(2).rjust(8, "0") }.join.count("1").to_s
end
mask_2_ciddr "255.255.255.0"
=> "/24"
mask_2_ciddr "255.255.255.128"
=> "/25"
Una solución es probablemente usar la gema ipadmin lugar que se parece mucho más completo. Todavía estoy interesado en ver qué solución hay para esto desde la perspectiva del código. –