Moin.

Kleines Problem:
Ich hab einen alten Raspberry Pi (einer der ersten, noch mit Wheezy), 32 bit, PHP5, keine GMP-Erweiterung. Updates gibts nicht mehr, da die ganzen online repos schon weg sind. Eine Änderung dieser Hardware sind technisch und wirtschaftlich bedingt nicht möglich oder sinnvoll. An diesem Pi hängen 14 (Archiv-)Festplatten, die über SSH ein/aus geschaltet werden können. Es ist also nur die Platte aktiv, deren Daten ich brauche. Über smartctl les ich von den Platten u.a. die Temperatur, Power On Hours etc. ein und lass mir das Ganze auf ner einfachen php-Seite anzeigen.
Das alles funktioniert jetzt schon seit 8 Jahren.

Hab jetzt aber schon 2 neue Festplatten dabei, wo der Wert für die Betriebsstunden unmöglich gross erscheint, z.B. 196889890783256. Da dieser Wert bis zu diesm Zeitpunkt ein String ist, kommt PHP noch damit klar, muss ja nichts gerechnet werden.
Rechne ich das dann mit dem Windows Calc nach Hex um, kommt 0xB31200000018 raus. Diese 0x....18 wären dann 24 Stunden, das geht sich bei der neuen Platte auch sehr genau hin.
Idee: Ich mach von diesem Wert einfach ein $val = $val & 0xFFFFFFFF, also hol mir nur die untersten 32 bit.
Problem: Ich krieg da dann 0x7FFFFFFF raus, da PHP auf dem 32bit-Pi eben mit diesem riesigen Wert nicht klarkommt.

Den Wert von smartctl direkt als hex kriegen geht scheinbar leider nicht, zumindest hab ich keine Option dazu gefunden.

Wie könnte man jetzt auf einem 32bit-System von diesem 64bit-String nur die unteren 32bit behalten und den Rest verwerfen?
24bit würden auch noch reichen.

MfG
Stefan