根据给定的开始和结束 IP 地址导出网络掩码
Derive Netmask given start and end IP addresses
我需要在给定 javascript 中的子网中的块的起始和结束 ip 地址的情况下计算网络掩码。我利用了这个答案 和
起始地址为 ac164980
,结束地址为 ac16498e
var scope = ipScope;
var s = parseInt("0x"+startAddress ,16);
var e = parseInt("0x"+endAddress ,16);
var m = parseInt("0xFFFFFFFF",16);
var nm = ""+(m ^ s ^ e);
我预计 FFFFFFC0
但结果是 -15
我哪里出错了?
您需要在最后将结果转换回十六进制字符串(decimalToHexString 函数取自:):
function decimalToHexString(number)
{
if (number < 0)
{
number = 0x100000000 + number;
}
return number.toString(16).toUpperCase();
}
var startAddress = "ac164980",
endAddress = "ac16498e";
var s = parseInt("0x"+startAddress, 16);
var e = parseInt("0x"+endAddress, 16);
var m = parseInt("0xFFFFFFFF", 16);
var nm = decimalToHexString(m ^ s ^ e);
然而结果是FFFFFFF1
。
这里其实有2个问题。首先是使用startIP和endIP的计算假设。
确实应该是startIP和endIP所在子网的scopeSize
第二个是返回的负值的表示。这是固定的:
var nm = (0xFFFFFFFF + (-1 ^(scope-1)) +1).toString(16).toUpperCase();
我需要在给定 javascript 中的子网中的块的起始和结束 ip 地址的情况下计算网络掩码。我利用了这个答案 和
起始地址为 ac164980
,结束地址为 ac16498e
var scope = ipScope;
var s = parseInt("0x"+startAddress ,16);
var e = parseInt("0x"+endAddress ,16);
var m = parseInt("0xFFFFFFFF",16);
var nm = ""+(m ^ s ^ e);
我预计 FFFFFFC0
但结果是 -15
我哪里出错了?
您需要在最后将结果转换回十六进制字符串(decimalToHexString 函数取自:):
function decimalToHexString(number)
{
if (number < 0)
{
number = 0x100000000 + number;
}
return number.toString(16).toUpperCase();
}
var startAddress = "ac164980",
endAddress = "ac16498e";
var s = parseInt("0x"+startAddress, 16);
var e = parseInt("0x"+endAddress, 16);
var m = parseInt("0xFFFFFFFF", 16);
var nm = decimalToHexString(m ^ s ^ e);
然而结果是FFFFFFF1
。
这里其实有2个问题。首先是使用startIP和endIP的计算假设。
确实应该是startIP和endIP所在子网的scopeSize
第二个是返回的负值的表示。这是固定的:
var nm = (0xFFFFFFFF + (-1 ^(scope-1)) +1).toString(16).toUpperCase();