Comment convertir des valeurs décimales en leur équivalent hexadécimal en JavaScript?
javascript
hex
tostring
base
number-formatting
Luke Smith
la source
la source
Réponses:
Convertissez un nombre en une chaîne hexadécimale avec:
Et inversez le processus avec:
la source
yourNumber
est une variable. Si vous souhaitez utiliser un littéral numérique, vous devrez faire quelque chose comme(45).toString(16)
, mais si vous codez en dur un nombre, veuillez simplement l'écrire vous-même sous forme de chaîne hexadécimale ...(45).toString(16)
sera toujours égal'2d'
, alors ne gaspillez pas le processeur cycles pour comprendre cela.42..toString(16)
Si vous devez gérer des choses comme les champs de bits ou les couleurs 32 bits, vous devez traiter les numéros signés. La fonction JavaScript
toString(16)
retournera un nombre hexadécimal négatif qui n'est généralement pas ce que vous voulez. Cette fonction fait un ajout fou pour en faire un nombre positif.la source
number = 0x100000000 + number;
>>>
opérateur pour convertir un nombre en représentation non signée, par exemple des((-3253) >>> 0).toString(16)
retours"fffff34b"
.+1
pour un ajout utile, mais si vous convertissez des nombres dans une notation différente, tous les nombres sont déjà "généralement" positifs, sinon vous voulez des résultats négatifs.Le code ci-dessous convertira la valeur décimale d en hexadécimal. Il vous permet également d'ajouter un remplissage au résultat hexadécimal. Donc 0 deviendra 00 par défaut.
la source
la source
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
const hex = d => Number(d).toString(16).padStart(2, '0')
😁Pour être complet, si vous voulez la représentation hexadécimale en complément à deux d'un nombre négatif, vous pouvez utiliser l' opérateur de décalage vers la droite de remplissage nul
>>>
. Par exemple:Il y a cependant une limitation: les opérateurs JavaScript au niveau du bit traitent leurs opérandes comme une séquence de 32 bits , c'est-à-dire que vous obtenez le complément à 32 bits.
la source
C# number to hexadecimal
produisait des résultats différentsJavascript number to hexadecimal
. Il semble que Javascript ait un problème avec les nombres négatifs. Cette réponse semble être la solution au problème.((-2)>>>0).toString(16).substring(2)
Avec rembourrage:
la source
Sans boucle:
N'est-il pas préférable de ne pas utiliser de tests de boucle qui doivent être évalués?
Par exemple, au lieu de:
avoir
la source
Combiner certaines de ces bonnes idées pour une fonction de valeur RVB en hexadécimal (ajoutez le
#
ailleurs pour HTML / CSS):la source
La réponse acceptée ne tenait pas compte des codes hexadécimaux renvoyés à un seul chiffre. Ceci est facilement ajusté par:
et
Je crois que les réponses ci-dessus ont été publiées à plusieurs reprises par d'autres sous une forme ou une autre. Je les enveloppe dans une fonction toHex () comme ceci:
Notez que l'expression régulière numérique provient de plus de 10 fonctions d'expression régulière JavaScript utiles pour améliorer l'efficacité de vos applications Web .
Mise à jour: Après avoir testé cette chose plusieurs fois, j'ai trouvé une erreur (guillemets doubles dans le RegExp), j'ai donc corrigé cela. TOUTEFOIS! Après pas mal de tests et après avoir lu l'article par almaz - j'ai réalisé que je ne pouvais pas faire fonctionner les nombres négatifs.
De plus - j'ai fait un peu de lecture à ce sujet et puisque tous les numéros JavaScript sont stockés sous forme de mots 64 bits, peu importe quoi - j'ai essayé de modifier le code numHex pour obtenir le mot 64 bits. Mais il s'avère que vous ne pouvez pas faire ça. Si vous mettez "3.14159265" COMME UN NUMÉRO dans une variable - tout ce que vous pourrez obtenir est le "3", car la partie fractionnaire n'est accessible qu'en multipliant le nombre par dix (IE: 10.0) à plusieurs reprises. Ou pour le dire autrement - la valeur hexadécimale de 0xF entraîne la conversion de la valeur à virgule flottante en un entier avant qu'elle ne soit ANDée, ce qui supprime tout derrière la période. Plutôt que de prendre la valeur dans son ensemble (c.-à-d.: 3,14159265) et d'opérer la valeur à virgule flottante sur la valeur 0xF.
Donc, la meilleure chose à faire, dans ce cas, est de convertir le 3.14159265 en chaîne , puis de convertir simplement la chaîne. En raison de ce qui précède, il permet également de convertir facilement des nombres négatifs car le signe moins devient simplement 0x26 à l'avant de la valeur.
Donc, ce que j'ai fait était de déterminer que la variable contient un nombre - il suffit de le convertir en chaîne et de convertir la chaîne. Cela signifie pour tout le monde que du côté serveur, vous devrez décocher la chaîne entrante, puis déterminer que les informations entrantes sont numériques. Vous pouvez le faire facilement en ajoutant simplement un "#" au début des chiffres et un "A" au début d'une chaîne de caractères qui revient. Voir la fonction toHex ().
S'amuser!
Après une autre année et beaucoup de réflexion, j'ai décidé que la fonction "toHex" (et j'ai aussi une fonction "fromHex") avait vraiment besoin d'être remaniée. Toute la question était "Comment puis-je faire cela plus efficacement?" J'ai décidé qu'une fonction de / vers hexadécimal ne devrait pas se soucier si quelque chose est une partie fractionnaire, mais en même temps, elle devrait s'assurer que les parties fractionnaires sont incluses dans la chaîne.
Alors la question est devenue: "Comment savez-vous que vous travaillez avec une chaîne hexadécimale?". La réponse est simple. Utilisez les informations de pré-chaîne standard déjà reconnues dans le monde entier.
En d'autres termes - utilisez "0x". Alors maintenant, ma fonction toHex cherche à voir si c'est déjà là et si c'est le cas - elle retourne juste la chaîne qui lui a été envoyée. Sinon, il convertit la chaîne, le nombre, peu importe. Voici la fonction toHex révisée:
Il s'agit d'une fonction très rapide qui prend en compte les chiffres uniques, les nombres à virgule flottante et vérifie même si la personne envoie une valeur hexadécimale pour être à nouveau hexadécimée. Il utilise seulement quatre appels de fonction et seulement deux d'entre eux sont dans la boucle. Pour décocher les valeurs que vous utilisez:
Comme la fonction toHex (), la fonction fromHex () recherche d'abord le "0x" et ensuite elle traduit les informations entrantes en une chaîne si ce n'est pas déjà une chaîne. Je ne sais pas comment ce ne serait pas une chaîne - mais juste au cas où - je vérifie. La fonction passe ensuite en revue, saisissant deux caractères et les traduisant en caractères ASCII. Si vous voulez qu'il traduise Unicode, vous devrez changer la boucle en passant par quatre (4) caractères à la fois. Mais vous devez également vous assurer que la chaîne n'est PAS divisible par quatre. Si c'est le cas - alors c'est une chaîne hexadécimale standard. (N'oubliez pas que la chaîne comporte "0x" à l'avant.)
Un script de test simple pour montrer que -3.14159265, une fois converti en chaîne, est toujours -3.14159265.
En raison de la façon dont JavaScript fonctionne en ce qui concerne la fonction toString (), tous ces problèmes peuvent être éliminés, ce qui causait auparavant des problèmes. Désormais, toutes les chaînes et tous les nombres peuvent être convertis facilement. De plus, des choses telles que des objets entraîneront la génération d'une erreur par JavaScript lui-même. Je crois que c'est à peu près aussi bon que possible. La seule amélioration qui reste est que le W3C inclue simplement une fonction toHex () et fromHex () dans JavaScript.
la source
if( s.substr(0,2)
avant ceif (typeof s != "string")
n'est probablement pas ce que vous voulez, par exemple. Ce que j'étais revenu n'était pas non plus ce que j'attendais (toHex(0x1f635)
donne"0x313238353635"
). N'ont pas enquêté plus avant.substr
&toLowerCase
sur une non-chaîne ... donc soit lestypeof
besoins doivent venir plus tôt, soit, si vous vous attendeztoHex
à lancer une non-chaîne là, vous devez supprimertypeof
complètement la coche. Ça a du sens? Autrement dit, si j'utilisais le code ici sans modifications ettoHex(0x1f635)
que j'appelais, j'obtiendraisUncaught TypeError: s.substr is not a function
. Si je déplace la chaîne de caractères plus tôt, vous avez raison, le nombre est d'abord décimal, peut-être, et les choses vont de côté. Ce qui bien sûr signifie que vous ne pouvez pas faire un simple casting ici s'ils
ne s'agit pas d'une chaîne.Le 16 est le radix et il y a 16 valeurs dans un nombre hexadécimal :-)
la source
Pour toute personne intéressée, voici un JSFiddle comparant la plupart des réponses données à cette question .
Et voici la méthode que j'ai utilisée:
En outre, gardez à l'esprit que si vous cherchez à convertir de la décimale en hexadécimal pour une utilisation en CSS en tant que type de données de couleur , vous préférerez plutôt extraire les valeurs RVB de la décimale et utiliser rgb () .
Par exemple ( JSFiddle ):
Ceci définit
#some-element
lacolor
propriété CSS dergb(64, 62, 154)
.la source
Contraint / complété à un nombre défini de caractères:
la source
Voici une version réduite d'ECMAScript 6:
la source
la source
color: rgb(r,g,b)
où rg et b sont des nombres décimaux.function decimalToHexString(i) { var result = "00"; if (i >= 0 && i <= 15) { result += "000" + i.toString(16); } else if (i >= 16 && i <= 255) { result += "00" + i.toString(16); } else if (i >= 256 && i <= 4095) { result += "0" + i.toString(16); } else if (i >= 4096 && i <= 65535) { result += i.toString(16); } return result }
Si vous souhaitez convertir un nombre en une représentation hexadécimale d'une valeur de couleur RGBA, j'ai trouvé que c'était la combinaison la plus utile de plusieurs conseils à partir d'ici:
la source
Le commentaire AFAIK 57807 est erroné et devrait ressembler à ceci : var hex = Number (d) .toString (16); au lieu de var hex = parseInt (d, 16);
la source
Et si le nombre est négatif?
Voici ma version.
la source
Je fais la conversion en chaîne hexadécimale dans une boucle assez grande, j'ai donc essayé plusieurs techniques afin de trouver la plus rapide. Par conséquent, je devais avoir une chaîne de longueur fixe et encoder correctement les valeurs négatives (-1 => ff..f).
Simple
.toString(16)
n'a pas fonctionné pour moi car j'avais besoin de valeurs négatives pour être correctement encodées. Le code suivant est le plus rapide que j'ai testé jusqu'à présent sur des valeurs de 1 à 2 octets (notez que celasymbols
définit le nombre de symboles de sortie que vous souhaitez obtenir, c'est-à-dire pour un entier de 4 octets, il doit être égal à 8):Il fonctionne plus rapidement que
.toString(16)
sur des nombres de 1 à 2 octets et plus lentement sur des nombres plus grands (lorsquesymbols
> = 6), mais devrait toujours surpasser les méthodes qui codent correctement les valeurs négatives.la source
Comme l'indique la réponse acceptée, le moyen le plus simple de convertir de décimal en hexadécimal est
var hex = dec.toString(16)
. Cependant, vous préférerez peut-être ajouter une conversion de chaîne, car elle garantit que les représentations de chaîne comme"12".toString(16)
fonctionnent correctement.Pour inverser le processus, vous pouvez également utiliser la solution ci-dessous, car elle est encore plus courte.
Il semble être plus lent dans Google Chrome et Firefox, mais il est nettement plus rapide dans Opera. Voir http://jsperf.com/hex-to-dec .
la source
Comment convertir décimal en hexadécimal en JavaScript
Je n'ai pas été en mesure de trouver une conversion décimale en hexadécimale brutalement propre / simple qui n'impliquait pas un désordre de fonctions et de tableaux ... j'ai donc dû faire cela pour moi.
la source
Pour tout résumer;
Cependant, si vous n'avez pas besoin de le reconvertir en un entier à la fin (c'est-à-dire pour les couleurs), il suffit de vous assurer que les valeurs ne sont pas négatives.
la source
Je n'ai pas trouvé de réponse claire, sans vérification si elle est négative ou positive, qui utilise le complément à deux (nombres négatifs inclus). Pour cela, je montre ma solution à un octet:
Vous pouvez utiliser cette instruction pour n'importe quel nombre d'octets, seulement vous ajoutez
FF
dans les endroits respectifs. Par exemple, à deux octets:Si vous souhaitez convertir un entier de tableau en chaîne hexadécimale:
la source
Dans le cas où vous cherchez à convertir en une représentation JavaScript ou CSS «complète», vous pouvez utiliser quelque chose comme:
la source
Vous pouvez faire quelque chose comme ça dans ECMAScript 6 :
la source
Si vous cherchez à convertir de grands entiers, c'est-à-dire des nombres supérieurs à Number.MAX_SAFE_INTEGER - 9007199254740991, vous pouvez utiliser le code suivant
la source
Ceci est basé sur les solutions de Prestaul et Tod. Cependant, il s'agit d'une généralisation qui tient compte de la taille variable d'une variable (par exemple, analyser la valeur signée d'un journal série de microcontrôleur).
Script de test:
Résultats de test:
Remarque: Je ne sais pas trop pourquoi il échoue au-dessus de 32 bits
la source
Voici ma solution:
La question dit: "Comment convertir décimal en hexadécimal en JavaScript" . Bien que la question ne spécifie pas que la chaîne hexadécimale doit commencer par un préfixe 0x, toute personne qui écrit du code doit savoir que 0x est ajouté aux codes hexadécimaux pour distinguer les codes hexadécimaux des identificateurs de programmation et d' autres nombres (1234 peut être hexadécimal, décimal ou même octal).
Par conséquent, pour répondre correctement à cette question, à des fins d'écriture de script, vous devez ajouter le préfixe 0x.
La fonction Math.abs (N) convertit les négatifs en positifs, et en prime, il ne semble pas que quelqu'un l'ait exécutée à travers une déchiqueteuse.
La réponse que je voulais, aurait eu un spécificateur de largeur de champ, donc nous pourrions par exemple afficher les valeurs 8/16/32/64 bits comme vous les verriez répertoriées dans une application d'édition hexadécimale. Voilà, c'est la vraie réponse.
la source
Number('0xFF') === 255;
pour tous ceux qui veulent l'opération inverse.