2015-02-05 64 views
1

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

随着ac164980一个startAddress和endAddress的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

首先,你没有在最后把你的整数转换回十六进制。 – 2015-02-05 19:32:41

回答

0

这里实际存在2个问题。首先是使用startIP和endIP的计算假设。

它确实应该是startIP和endIP所在子网的scopeSize

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

var nm = (0xFFFFFFFF + (-1 ^(scope-1)) +1).toString(16).toUpperCase(); 
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但是。

相关问题