1705 votes

Comment convertir des décimales en hexadécimales en JavaScript ?

Comment convertir des valeurs décimales en leur équivalent hexadécimal en JavaScript ?

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

2837voto

Prestaul Points 31986

Convertir un nombre en une chaîne hexadécimale avec :

hexString = yourNumber.toString(16);

Et inversez le processus avec :

yourNumber = parseInt(hexString, 16);

Exemples

1 votes

n'est-ce pas votreNum = parseInt(votreNum, 10) ; -- et non 16 ?

48 votes

votreNum est une chaîne hexagonale dans ce cas. Par exemple, (255).toString(16) == 'ff' && parseInt('ff', 16) == 255

1 votes

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/

155voto

Tod Points 1798

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));

2 votes

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;

3 votes

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.

32 votes

Vous pouvez utiliser >>> opérateur pour convertir un nombre en représentation non signée, par ex. ((-3253) >>> 0).toString(16) renvoie à "fffff34b" .

97voto

Luke Smith Points 4335

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;
}

5 votes

Cela ne permet pas de gérer correctement les valeurs négatives. decimalToHex(-6, 4) renverrait 00-6.

3 votes

Il a également des problèmes avec les flottants, mais l'ajout de Math.round() a réglé ce problème. (+1ed)

0 votes

Je "tire" des nombres d'un tableau ('255,0,55', etc.) et le .toString(16) n'a pas fonctionné. Je n'obtenais que les mêmes chiffres ! J'ai ajouté la fonction "Number" à l'avant, et maintenant ça marche ! J'ai seulement passé environ quatre heures à essayer de trouver la solution !

70voto

Baznr Points 51
function toHex(d) {
    return  ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}

1 votes

function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }

2 votes

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.

31 votes

ES6 const hex = d => Number(d).toString(16).padStart(2, '0')

38voto

quartzo Points 431

Avec rembourrage :

function dec2hex(i) {
   return (i+0x10000).toString(16).substr(-4).toUpperCase();
}

2 votes

@Lucas Il retourne les 4 derniers caractères.

Prograide.com

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.

Powered by:

X