2015-02-05 3 views
1

Мне нужно вычислить маску сети с учетом адреса запуска и конца ip для блока в подсети, в javascript. Я использовала этот ответ https://stackoverflow.com/a/8872819/664479 иВывод маски сетки с учетом начальных и конечных IP-адресов

С в StartAddress из ac164980 и 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

Для начала вы не преобразовали целые числа обратно в шестнадцатеричные в конце. –

ответ

0

Здесь на самом деле 2 проблемы. Первое - это расчетное предположение с использованием startIP и endIP.

Это действительно должно быть scopeSize подсети, в которой находятся startIP и endIP.

Второе - это представление отрицательного значения, которое возвращается. Это исправлено с:

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 однако.

Смежные вопросы