J'ai une chaîne en PHP (provenait d'une source de données), qui représente un entier de 32 bits non signé formaté.
J'ai besoin de le stocker dans une base de données mysql sous forme d'entier signé em> 32 bits, de sorte que plus tard, je puisse le récupérer de PHP et l'utiliser comme une constante entière (éventuellement négative) signée (depuis PHP ne pas T avoir des entiers non signés). Donc, ce dont j'ai besoin est une méthode de conversion, soit pour PHP ou MySQL. Il ne devrait pas être dépendant de la plate-forme (pas de problèmes endians / 32/64 bits). P> Je sais comment convertir un entier signé en non signé à l'aide de MySQL: P> select CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER);
+------------------------------------------------------+
| CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER) |
+------------------------------------------------------+
| 3232240316 |
+------------------------------------------------------+
3 Réponses :
Si vous venez de lancer le numéro à un entier en PHP, cela fera le tour.
-1062726980 3232240316
Désolé, mais cela ne fonctionnera pas sur certains systèmes 64 bits, où PHP INT est 64 bits par défaut.
Ceci:
$val = (bccomp("2147483647", $val) < 0) ? bcsub($val, "4294967296") : $val;
Solution PURE MySQL:
SELECT yourSigned & 0xFFFFFFFF;