ipv4的掩码长度到掩码地址转换

ipv4的地址用32位二进制数表示,为了显示方便,一般是按4段十进制数表示,每段取值范围是0-255,对应二进制数00000000-11111111
有些场合,掩码是用4段十进制数表示,跟ip地址一样,另外一些场合是用0-32之间是数字表示掩码长度。
掩码的IP地址用二进制表示的话,看起来很直观,掩码就是一个32位的二进制数,掩码长度就是它从左到右的连续的1的个数。
那么换算方法也很简单

	...
	var regmasklen=/^([0-9]|[1-2][0-9]|[3][0-2])$/;
	...
	if (regmasklen.test(value)==false) alert("掩码长度范围:0-32") //对掩码长度的输入进行合法性校验
	else {
		let masklen=Number(value);
		let maskvalue=(2**32)-(2**(32-masklen));
		let ips1=maskvalue>>>24;
		let ips2=(maskvalue>>16)&255;
		let ips3=(maskvalue>>8)&255;
		let ips4=maskvalue&255);
		$("#mask").val(ips1+"."+ips2+"."+ips3+"."+ips4)
		}

聪明的你可能一眼看出来不和谐的地方了,为什么代码里那句计算掩码值用幂运算,而不用位左移,位移操作不是更快么?啊,这个是JavaScript语言的锅,在JavaScript里位操作是按32位二进制操作的,1左移32位的话,还会变成1,而不是期待的2**32,虽然用比较判断,添加些逻辑也可以用位操作搞,不过代码就更复杂了,也不清晰明了,感觉纯属添乱了。

let maskvalue=(!masklen) ? 0 : ( (-1)-((1<<(32-masklen))-1) );

像这个,虽然结果一样,不过不够直观,看着也别扭

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值