Я пишу чат-сервер в node.js, и я хочу хранить подключенные IP-адреса пользователей в базе данных mysql как (беззнаковые) целые числа. Я написал метод javascript для преобразования ip-адреса как строки в целое число. Однако я получаю некоторые странные результаты.
Вот мой код:
function ipToInt(ip) {
var parts = ip.split(".");
var res = 0;
res += parseInt(parts[0], 10) << 24;
res += parseInt(parts[1], 10) << 16;
res += parseInt(parts[2], 10) << 8;
res += parseInt(parts[3], 10);
return res;
}
Когда я запускаю вызов метода как ipToInt("192.168.2.44");
, результат получается -1062731220
.
Похоже, произошло переполнение, что странно, потому что ожидаемый вывод (3232236076)
находится внутри диапазона чисел в javascript (2 ^ 52).
Когда я проверяю -1062731220
в двоичной форме, я вижу, что 3232236076
сохраняется, но заполняется ведущими 1.
Я не уверен, но я думаю, что проблема связана с целыми числами без знака.
Может кто-нибудь из вас объяснить, что происходит?
И возможно, как разобрать -1062731220
обратно на строку ip?