Lua number to ints



  • Hallo, ich möchte Zahlen in Lua 5.1 binär serialisieren. Der number-Typ in Lua hat 64 bits. Ich möchte diese in zwei 32 bits Zahlen kodieren und wieder dekodieren.

    local n = 1234567890.91
    local u1 = bit.band(n, 0xffffffff)
    local u2 = bit.band(rshift(n, 32), 0xffffffff)
    print(u1, u2)
    

    1234567891 1234567891

    Kann jemand helfen?



  • Das Problem hat sich erledigt, ich habe mir einen Raspberry Pi gekauft.



  • mondmännlein schrieb:

    Das Problem hat sich erledigt, ich habe mir einen Raspberry Pi gekauft.

    Interessante Lösung des Problems. 👍



  • Ja, früher hätte man dafür noch eine Playstation 3 gebraucht.



  • mir ist, als gäbe es 64 Bit integers erst ab lua 5.3

    double ist zwar 64 bit, aber davon nur 52+1 Bit Mantisse.



  • zufallswert schrieb:

    mir ist, als gäbe es 64 Bit integers erst ab lua 5.3

    double ist zwar 64 bit, aber davon nur 52+1 Bit Mantisse.

    Sicherlich, aber 64 bits Daten sind und bleiben 64 bits Daten, oder nicht? Ist es möglich oder nicht möglich, diese in 2x32 bits und zurück zu konvertieren?



  • was genau meinst du mit "konvertieren" - welcher Datentyp soll in zwei 32-Bit Integers konvertiert werden und zurück?

    Wenn kein 64 Bit Integer Datentyp da ist, kannst du Funktionen implementieren, die mit Hilfe einer Datenstruktur aus zwei 32-Bit Integers einen 64 Bit Typ simulieren. Allgemeiner kann man theoretisch Funktionen für beliebig lange Zahlen implementieren (nennt sich beispielsweise "bignum" oder "big numbers", viele Programmiersprachen haben so einen Typ bereits eingebaut oder haben Libraries dafür); in der Praxis gibt es dafür natürlich Grenzen, spätestens wenn die zu speichernde Zahl größer als der virtuelle Adressraum ist oder die arithmetischen Operationen aufgrund der Zahlenlänge unakzeptabel viel Zeit brauchen.



  • zufallswert schrieb:

    was genau meinst du mit "konvertieren" - welcher Datentyp soll in zwei 32-Bit Integers konvertiert werden und zurück?

    Steht schon alles da. 1x64 bit aufsplitten in 2x32 bit. Geh weg.



  • "1x64 bit" ist aber kein Datentyp sondern eine Datenlänge.

    Datentyp wäre zB double oder 64 Bit Integer. Und genau darauf kommt es an.



  • Wenn du Ahnung von Lua hättest, würdest du das nicht fragen. Du kannst nicht helfen, trotzdem danke.


  • Mod

    mondmännlein schrieb:

    Das Problem hat sich erledigt, ich habe mir einen Raspberry Pi gekauft.

    Bräuchte man für das genannte Vorhaben nicht eher 2 (alte) Raspis?


Log in to reply