我需要在javascript中计算子网中块的开始和结束IP地址的网络掩码。我利用了这个答案https://stackoverflow.com/a/8872819/664479和
起始地址为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
我哪里出错?
答案 0 :(得分: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
。
答案 1 :(得分:0)
这里实际上有两个问题。第一个是使用startIP和endIP的计算假设。
它应该是startIP和endIP所在子网的scopeSize
。
第二个是表示返回的负值。那是固定的:
var nm = (0xFFFFFFFF + (-1 ^(scope-1)) +1).toString(16).toUpperCase();