Grandes valeurs en hexadécimal avec PHP hexdec
J'ai quelques grandes valeurs hexadécimales que je veux afficher que des numéros réguliers, j'ai été en utilisant hexdec() pour convertir de flotter, et j'ai trouvé une fonction sur PHP.net afin de les convertir en décimal, mais il semble frappé d'un plafond, par exemple:
$h = 'D5CE3E462533364B';
$f = hexdec($h);
echo $f .' = '. Exp_to_dec($f);
De Sortie: 1.5406319846274 E+19 = 15406319846274000000
Résultat de calc.exe = 15406319846273791563
Est-il une autre méthode pour convertir les grandes valeurs en hexadécimal?
OriginalL'auteur aland | 2009-08-13
Vous devez vous connecter pour publier un commentaire.
Comme l'a dit le hexdec page de manuel:
Si vous souhaitez obtenir une sorte de grand entier (non flottant), vous en aurez besoin stockées à l'intérieur d'une chaîne. Cela pourrait être possible en utilisant BC Mathématiques fonctions.
Par exemple, si vous regardez dans les commentaires de la hexdec page de manuel, vous trouverez cette remarque
Si vous adaptez cette fonction un peu, pour éviter un avis, vous obtiendrez:
(Cette fonction a été copié à partir de la remarque je lien; et seulement un peu adapté par moi)
Et l'utiliser sur votre nombre:
La sortie sera:
Donc, pas le genre de big float-vous eu ; et semble OK avec ce que vous attendez:
Espérons que cette aide 😉
Et, oui, les notes de l'utilisateur sur la documentation de PHP sont parfois une vraie mine d'or 😉
Vous êtes les bienvenus 🙂 amusez-vous!
Cela fonctionne comme prévu. Merci beaucoup!
OriginalL'auteur Pascal MARTIN
hexdec() commutateurs de int en float lorsque le résultat est trop grand pour être représenté comme un int. Si vous voulez arbitrairement long valeurs, vous allez probablement avoir à rouler votre propre fonction de conversion pour changer de chaîne hexadécimale d'un GMP entier.
OriginalL'auteur Randy
1.5406319846274 E+19 est une représentation limitée de vous le nombre. Vous pouvez avoir une vue plus complète de l'un à l'aide de printf()
...seront de sortie "15406319846273792000". PHP utilise des flotteurs pour de tels grands nombres, de sorte que vous pouvez perdre un peu de précision. Si vous devez travailler avec une précision arbitraire numéros, vous pouvez essayer les bcmath extension. En divisant l'hexagone en deux 32-bit des mots (qui doivent être en sécurité sur la plupart des systèmes), vous devez être en mesure d'obtenir plus de précision. Par exemple:
...serait-ensemble $f 15406319846273791563.
Juste une petite attention sur ce point. Cela ne fonctionnera que sur un 16 caractères hex quelque chose plus court donne un résultat incorrect
OriginalL'auteur Josh Davis
Convertir HEX DEC est facile.. Mais, reconstruire arrière nombre hexadécimal est très dur.
Essayez d'utiliser base_convert ..
OriginalL'auteur Felix
C'est le module à utiliser. Le convertir à une fonction et ensuite utiliser sur vos chiffres.
Remarque: ces nombres hexadécimaux comme des chaînes de caractères, donc:
OriginalL'auteur Enki
De cette question tout en stockant les clés 64 bits en base de données MySQL. J'ai été en mesure d'obtenir un peu une conversion parfaite pour un 64 bits entier signé (PHP limitation) à l'aide de quelques opérateurs binaires: (Ce code est 16x plus vite que bchexdec la fonction et les variables obtenues sont à l'aide de la moitié de la mémoire en moyenne).
MySQL signé type de données BIGINT est un grand match pour le présent comme un indice ou le stockage en général. HEX(colonne) est un moyen simple de convertir HEX dans la requête SQL pour l'utiliser ailleurs.
OriginalL'auteur ecrode
OriginalL'auteur ĆĦΔŇĐŘΔ ŇΔҜҜΔ
N'est pas
intval(var, base)
prendre soin d'elle?De la Manuel PHP.
OriginalL'auteur mcandre