1

我需要在给定子网中的块的开始和结束 IP 地址的情况下,用 javascript 计算网络掩码。我利用了这个答案https://stackoverflow.com/a/8872819/664479

具有 startAddressac164980和 endAddressac16498e

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

我哪里做错了?

4

2 回答 2

0

您需要在最后将结果转换回十六进制字符串(decimalToHexString 函数取自:https ://stackoverflow.com/a/697841/932282 ):

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

于 2015-02-05T19:56:03.063 回答
0

这里实际上有两个问题。首先是使用 startIP 和 endIP 的计算假设。

它确实应该是scopeSizestartIP 和 endIP 所在的子网。

第二个是返回的负值的表示。这是固定的:

var nm = (0xFFFFFFFF + (-1 ^(scope-1)) +1).toString(16).toUpperCase();
于 2015-02-06T19:38:48.577 回答