Netmask to CIDR in ruby

ip, ruby

Solution

Here is the quick and dirty way

require 'ipaddr'
puts IPAddr.new("255.255.255.0").to_i.to_s(2).count("1")

There should be proper function for that, I couldn't find that, so I just count "1"

If you're going to be using the function in a number of places and don't mind monkeypatching, this could help:

IPAddr.class_eval
  def to_cidr
    "/" + self.to_i.to_s(2).count("1")
  end
end

Then you get

IPAddr.new('255.255.255.0').to_cidr
# => "/24"

Problem

I've been using the ip-address gem and it doesn't seem to have the ability to convert from a netmask of the form ``` 255.255.255.0 ``` into the CIDR form ``` /24 ``` Does anyone have an ideas how to quickly convert the former to the latter ?

Original source