Die IP-Adressen gespeichert als int-Ergebnisse im überlauf?

Ich Schreibe ein chat-server in node.js und ich will, speichern die angeschlossenen Benutzer IP-Adressen in einer mysql-Datenbank als (unsigned) Ganzzahlen.
Ich habe geschrieben eine javascript-Methode zum konvertieren einer ip-Adresse als string in eine Ganzzahl. Ich bekomme einige seltsame Ergebnisse jedoch.

Hier ist mein code:

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;
}

Wenn ich rufen Sie die Methode als ipToInt("192.168.2.44"); den Ergebnissen, die ich bekomme, ist -1062731220.
Es scheint wie ein überlauf aufgetreten ist, das ist seltsam, weil die erwartete Ausgabe (3232236076) im inneren ist die Zahl, die in javascript (2^52).

Wenn ich überprüfen -1062731220 in binärer form, ich kann sehen, dass die 3232236076 erhalten bleibt, aber gefüllt mit den führenden 1.

Ich bin mir nicht sicher, aber ich denke, dass das problem mit signed vs. unsigned Integer.

Können Sie sich erklären, was Los ist?
Und möglicherweise, wie zu analysieren -1062731220 wieder zu einem string ip?

InformationsquelleAutor der Frage JPuge | 2011-11-12

Schreibe einen Kommentar