Is there a way to calculate a CIDR  given a Sub net mask using any Java lib/function/trick?? I have been looking for a while and all I can find is from  CIDR -> Netmask and I need it the other way arround  Netmask -> CIDR ... Im not that handy on Java, but im willing to read a lot =)  thnx guys
PzP =)
Whipped up a quick example. This converts an InetAddress into a cidr value, it also validates that the InetAddress represents a valid netmask.
The test input is 255.255.128.0. The output cidr is 17.
package com.stackoverflow._19531411;
import java.net.InetAddress;
public class NetmaskToCIDR {
    public static int convertNetmaskToCIDR(InetAddress netmask){
        byte[] netmaskBytes = netmask.getAddress();
        int cidr = 0;
        boolean zero = false;
        for(byte b : netmaskBytes){
            int mask = 0x80;
            for(int i = 0; i < 8; i++){
                int result = b & mask;
                if(result == 0){
                    zero = true;
                }else if(zero){
                    throw new IllegalArgumentException("Invalid netmask.");
                } else {
                    cidr++;
                }
                mask >>>= 1;
            }
        }
        return cidr;
    }
    public static void main(String[] args) throws Exception {
        InetAddress netmask = InetAddress.getByName("255.255.128.0");
        System.out.println(convertNetmaskToCIDR(netmask));
    }
}
Credit for psuedocode @ https://stackoverflow.com/a/10090956/260633
You can use the toCidrNotation function in the Apache SubnetUtils module to do this. Here's a Java example.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With