9
votes

Comment lancer un entier de 32 bits d'unsigné pour signé dans MySQL ou PHP?

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 | 
+------------------------------------------------------+


0 commentaires

3 Réponses :


3
votes

Si vous venez de lancer le numéro à un entier en PHP, cela fera le tour.

-1062726980
3232240316


1 commentaires

Désolé, mais cela ne fonctionnera pas sur certains systèmes 64 bits, où PHP INT est 64 bits par défaut.



0
votes

Ceci:

$val = (bccomp("2147483647", $val) < 0) ? bcsub($val, "4294967296") : $val;


0 commentaires

1
votes

Solution PURE MySQL:

SELECT yourSigned & 0xFFFFFFFF;


0 commentaires