掩码位转换成子网掩码的Java实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wojiushiwo945you/article/details/80537561

IP/掩码位来表示一段IP范围,那么怎么通过掩码位计算出对应的子网掩码呢?
基本概念:掩码位即网络地址的位数。例如192.168.11.130/31表示网络地址有31位,主机地址有1位,那么31对应的子网掩码就是255.255.255.254(31个1+0)

通过移位计算,得到主机最大值,和网络地址最大值,图解原理如下:
计算掩码位,就是得到掩码位的二进制序列,然后每隔8位转换为十进制。
Java的Integer.parseInt可以将指定进制的字符串序列转换为int类型。输入一个掩码位,得到对应的子网掩码的点分十进制表示的代码如下:
for(int i=1;i<32;i++) {
			int ip = 0xFFFFFFFF << (32 - i);
			String binaryStr = Integer.toBinaryString(ip);
			StringBuffer buffer = new StringBuffer();
			for(int j=0;j<4;j++) {
				int beginIndex = j*8;
				buffer.append(Integer.parseInt(binaryStr.substring(beginIndex, beginIndex+8), 2)).append(".");
			}
			System.out.println("net mask "+i+" ,submask:"+buffer.substring(0,buffer.length()-1));
			
		}
上述代码即可输出1-31掩码位对应的子网掩码列表。其中 0xFFFFFFFF << (32 - i)就是得到对应的二进制序列。

猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/80537561