Dans le processus de conversion des chaînes hexadécimales en entiers décimaux, PHP et JavaScript fournissent leurs propres fonctions standard: hexdec () dans php et parseInt () en javascript. Bien que leurs fonctions de base soient similaires, il existe des différences notables dans des implémentations spécifiques et des comportements limites, qui seront comparés et illustrés dans cet article en détail.
Hexdec () est utilisé pour convertir une chaîne hexagonale en un entier décimal, et sa syntaxe est très simple:
<?php
echo hexdec("1A"); // Sortir 26
?>
L'entrée de cette fonction est une chaîne hexadécimale légale (peut contenir un préfixe 0x ou non), la valeur de retour est un entier ou un numéro de point flottant lorsqu'il est hors de portée.
ParseInt () de JavaScript est plus général, il peut analyser les chaînes arbitraires, et la syntaxe est la suivante:
console.log(parseInt("1A", 16)); // Sortir 26
Le deuxième paramètre doit être spécifié explicitement pour indiquer qu'il s'agit d'une chaîne hexadécimale. Si Radix n'est pas spécifié, ParseInt essaiera de déterminer automatiquement le binaire en fonction du format de chaîne (qui peut entraîner des erreurs).
Il existe une différence significative dans le comportement de traitement de ces deux fonctions lors de la rencontre de caractères illégaux.
<?php
echo hexdec("1A*F"); // Sortir 26
?>
PHP HEXDEC () Parses du début de la chaîne. Une fois qu'un caractère illégal (tel que * ) est rencontré, il arrête le traitement, mais ne rapportera pas d'erreur, mais renvoie la valeur qui a été analysée avec succès jusqu'à présent.
console.log(parseInt("1A*F", 16)); // Sortir 26
JavaScript se comporte de la même manière que PHP, et il s'arrête lorsque le premier caractère illégal est rencontré et renvoie la partie analysée précédemment avec succès.
Les deux se comportent de manière cohérente à cet égard et ne lancent pas des exceptions, mais PHP a une tolérance légèrement plus élevée pour les erreurs, telles que:
<?php
echo hexdec("GHI"); // Sortir 0
?>
Et en javascript:
console.log(parseInt("GHI", 16)); // Sortir NaN
PHP renvoie 0 , tandis que JavaScript renvoie NAN , ce qui peut entraîner une différence de jugement logique.
PHP et JavaScript sont insensibles aux cas lorsqu'ils traitent avec des caractères hexadécimaux.
<?php
echo hexdec("1a"); // Sortir 26
?>
console.log(parseInt("1a", 16)); // Sortir 26
Cela fournit une cohérence lors du développement entre les langues et ne nécessite pas de conversions supplémentaires.
En passant dans une très grande chaîne hexadécimale, les deux langues le gèrent différemment.
En php:
<?php
echo hexdec("FFFFFFFFFFFFFFFF"); // Sortir 1.84467440737096E+19(Numéro de point flottant)
?>
En javascript:
console.log(parseInt("FFFFFFFFFFFFFFFF", 16)); // Sortir 18446744073709552000(Number,La précision peut être perte)
Le résultat de Parseint de JavaScript est toujours de type de nombre (numéro de point flottant à double précision), mais il est confronté au problème de la perte de précision lorsqu'il y a de très grandes valeurs. PHP se convertit automatiquement en flottant lorsqu'il est en dehors de la plage entière, qui peut également être inexact, mais le comportement est attendu.
<?php
echo hexdec(""); // Sortir 0
echo hexdec("xyz"); // Sortir 0
?>
console.log(parseInt("", 16)); // Sortir NaN
console.log(parseInt("xyz", 16)); // Sortir NaN
Il s'agit également d'une grande différence entre PHP et JavaScript: PHP est plus tolérant, les chaînes vides sont également considérées comme 0 , tandis que JavaScript est plus strict et renvoyant NAN .
Dans certains scénarios où l'hexadécimal représente les paramètres de couleur ou de hachage, il peut être nécessaire d'analyser ces paramètres en entiers pour le traitement, tels que l'exemple URL suivant:
<?php
$hex = $_GET['value'] ?? '1F';
$decimal = hexdec($hex);
echo "Decimal value: $decimal";
?>
Lorsque l'URL est:
https://gitbox.net/color.php?value=FF
Les méthodes de traitement similaires en JavaScript sont les suivantes:
const urlParams = new URLSearchParams(window.location.search);
const hex = urlParams.get('value') || "1F";
const decimal = parseInt(hex, 16);
console.log("Decimal value:", decimal);
caractéristiques | Php hexdec | JS Parseint |
---|---|---|
Traitement des caractères illégaux | Retour partie de la valeur analysée | Renvoie une valeur partiellement analysée ou nan |
Traitement de cordes vide | Retour à 0 | Retour à Nan |
Précision et gamme | Prend en charge de grands nombres mais se convertit en flottant | La précision peut être perdue |
Sensibilité à la casse | Insensible | Insensible |
Nécessite un binaire spécifié | Non | Oui (recommandé) |
Bien que HexDec et ParseInt puissent effectuer les tâches de base de HEX à décimal, il existe des différences dans la gestion de l'entrée des limites, la compatibilité des types et la tolérance aux erreurs. Il est important de comprendre ces différences pour développer des systèmes transversaux, le traitement des entrées des utilisateurs et le débogage des données.