根据给定的开始和结束 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();