2013-10-23 20 views
5

CIDRSub net maskの場合、Java lib/function/trickを使って計算する方法はありますか? )=のthnx男与えられたネットマスクからCIDRを計算する -

PZPを私はしばらくの間、探していると私は見つけることができるすべてがCIDR -> Netmaskからであり、私はそれをNetmask -> CIDR arroundの他の方法を必要と...イムないという便利なJavaではなく、多くのことを読んで喜んでイム=)

答えて

5
をサポートする優れたPostgresのDBの機能を使用していたプロジェクトでも http://commons.apache.org/proper/commons-net/download_net.cgi

をApacheのネット・ジャー(クラスSubnetUtils)を見てください

簡単な例を挙げました。これによりInetAddressがcidr値に変換され、InetAddressが有効なネットマスクであることが検証されます。

テスト入力は255.255.128.0です。出力cidrは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)); 

    } 
} 

https://stackoverflow.com/a/10090956/260633

@擬似コードのためのクレジット
関連する問題