Comment convertir des valeurs décimales en leur équivalent hexadécimal en JavaScript ?
n'est-ce pas votreNum = parseInt(votreNum, 10) ; -- et non 16 ?
Comment convertir des valeurs décimales en leur équivalent hexadécimal en JavaScript ?
votreNum est une chaîne hexagonale dans ce cas. Par exemple, (255).toString(16) == 'ff' && parseInt('ff', 16) == 255
Quelqu'un peut-il m'indiquer la documentation sur toString()
paramètres ? Cela fonctionne pour moi, mais j'aimerais formater un peu la chaîne. Selon le MDN, toString()
n'accepte aucun paramètre : developer.mozilla.org/fr/JavaScript/Référence/Global_Objects/
Si vous devez gérer des choses comme des champs de bits ou des couleurs 32 bits, vous devez traiter des nombres signés. La fonction JavaScript toString(16)
retournera un nombre hexadécimal négatif, ce qui n'est généralement pas ce que vous souhaitez. Cette fonction fait des additions folles pour en faire un nombre positif.
function decimalToHexString(number)
{
if (number < 0)
{
number = 0xFFFFFFFF + number + 1;
}
return number.toString(16).toUpperCase();
}
console.log(decimalToHexString(27));
console.log(decimalToHexString(48.6));
Cette conversion n'est normalement pas nécessaire car JavaScript peut représenter tous les champs de 32 bits sous forme de nombres non signés (voir Number.MAX_SAFE_INTEGER). Pour la même raison, la conversion en unsigned peut être écrite comme suit : number = 0x100000000 + number;
Un petit mot sur mon commentaire précédent : La représentation hexagonale devrait fonctionner pour les nombres jusqu'à Number.MAX_SAFE_INTEGER, mais ce n'est pas le cas pour les opérations par bit (qui sont souvent utilisées pour créer des couleurs 32 bits). Le résultat des opérations bit à bit est toujours un entier 32 bits signé. Par conséquent, les résultats des opérations binaires >= 2^31 sont négatifs et 0x100000000 | 0 === 0.
Vous pouvez utiliser >>>
opérateur pour convertir un nombre en représentation non signée, par ex. ((-3253) >>> 0).toString(16)
renvoie à "fffff34b"
.
Le code ci-dessous convertira la valeur décimale d en hexadécimale. Il permet également d'ajouter un padding au résultat hexadécimal. Ainsi, 0 deviendra 00 par défaut.
function decimalToHex(d, padding) {
var hex = Number(d).toString(16);
padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;
while (hex.length < padding) {
hex = "0" + hex;
}
return hex;
}
Cela ne permet pas de gérer correctement les valeurs négatives. decimalToHex(-6, 4) renverrait 00-6.
Il a également des problèmes avec les flottants, mais l'ajout de Math.round() a réglé ce problème. (+1ed)
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
Il n'est pas difficile de l'étendre, vous coupez les derniers chiffres avec .slice(-number). Si vous ajoutez plus de zéros à l'avant, cela fonctionnera bien.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
9 votes
Il faut savoir que si vous partez d'une représentation sous forme de chaîne, il est très facile de perdre la précision lorsque vous la transformez en nombre dans le cadre de la conversion en hexadécimal. Voir danvk.org/wp/2012-01-20/… .
1 votes
Ce site est exactement ce dont vous avez besoin