Frage

Ich muss einen JS -Code portieren, der beinhaltet Math.random()*2147483648)^(new Date).getTime(). Während es für kleinere Zahlen aussieht, sind die Python -Funktion und die JS -Funktion in der Funktion äquivalent, aber mit großen Zahlen wie dieser enden die Werte ganz unterschiedlich.

Python:

>>> 2147483647 ^ 1257628307380
1257075044427

JavaScript:

> 2147483647 ^ 1257628307380
-1350373301

Wie kann ich den JavaScript -Wert von Python erhalten?

War es hilfreich?

Lösung

Python hat unbegrenzte Ganzzahlen, während JavaScript eine 32-Bit-Ganzzahl verwendet. Sie können manuell ein 32-Bit-Limit anwenden, um das gewünschte Ergebnis zu erhalten:

def xor32bit(a, b):
    m = (a ^ b) % (2**32)
    if m > (2**16):
        m -= 2**32
    return m

Andere Tipps

Der einfachste Weg wäre, CTypes zu verwenden, um das gleiche Überlaufverhalten wie JavaScript zu erhalten:

>>> import ctypes
>>> ctypes.c_int(1257075044427)
c_long(-1350373301)

Um den Wert zu erhalten:

>>> ctypes.c_int(1257075044427).value
-1350373301
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top