2009-08-26 3 views

Répondre

45

L'API

Pour convertir en nombre d'une chaîne hexadécimale:

parseInt(string, radix) 
  • chaîne

    : Obligatoire. La chaîne à analyser

  • radix: Facultatif. Un certain nombre (de 2 à 36) qui représente le système de numération à utiliser

Pour convertir un nombre à une chaîne hexadécimale:

NumberObject.toString(radix) 
  • radix: facultatif. Spécifie la base de base que vous souhaitez voir s'afficher.

valeurs Exemple radix:

  • - Le nombre indique une valeur binaire
  • - Le nombre indique en tant que valeur octal
  • - Le nombre s'affichera en tant que valeur hexadécimale

Exemple d'utilisation

valeur entière en hex:

>>> i = 10; 
10 
>>> i.toString(16); 
"a" 

chaîne Hex à valeur entière:

>>> h = "a"; 
"a" 
>>> parseInt(h, 16); 
10 

valeur entière en décimal:

>>> d = 16; 
16 
>>> d.toString(10); 
"16" 
+0

c'est encore mieux. sens inverse. – Yves

+0

Je ne vois pas comment le premier se convertit en hexadécimal. Pouvez-vous l'expliquer s'il vous plaît? De plus, la seconde donnera des résultats hexadécimaux et non décimaux comme indiqué. –

+0

@Russ Cam: La première prend la base comme paramètre - hexadécimal est la base 16 - et retourne une chaîne de représentation de ce nombre dans cette base. Vous êtes incorrect à propos de la seconde - il en résulte effectivement une valeur décimale. – aehlke

9

Spécifiez la base que vous souhaitez utiliser en tant que paramètre.

REMARQUE: Cela ne fonctionne que pour convertir les bases 2-36 en décimales.

parseInt(string, radix) 

parseInt("80", 10) // results in 80 
parseInt("80", 16) // results in 128 
// etc 
+0

+1 merci Russ - l'ai eu! – Yves

+0

@Nosredna vous avez raison, mais Russ Cam a obtenu la syntaxe correcte pour moi parseInt - ce qui est plus que suffisant. Merci. – Yves

+1

Downvoters - raisons bienvenue ... –

1

Utilisation de la fonction parseInt:

var noInBase10 = parseInt('8F',16); 
2

J'ai écrit une fonction pour convertir une chaîne JavaScript à partir d'une base à une autre base, avec la base d'origine et la nouvelle base spécifiée en tant que paramètres.

function convertFromBaseToBase(str, fromBase, toBase){ 
 
\t var num = parseInt(str, fromBase); 
 
    return num.toString(toBase); 
 
} 
 

 
alert(convertFromBaseToBase(10, 2, 10));

+0

Oui, c'est le chemin à parcourir! – Ansjovis86

6

Eh bien, je fait une fonction qui pourrait se traduire par de la base 10 à une base. (Cela dépend du nombre de chaînes que vous avez dans le tableau A, si c'est plus que + 10 il manquera de symboles), et j'ai presque pleuré quand je l'ai découvert en moins de 10 caractères avec ça. ..

Ajouter un signet et en tant qu'URL insérer ceci ... Je l'ai fait le chemin long mais personnel. Au moins, le mien peut utiliser une base qui est supérieure à 36. Vous pouvez ajouter d'autres symboles vous, mais si vous voulez, je peux le faire pour vous ...

var X = prompt("Choose your number"); 
 
var Y = prompt("Choose your base"); 
 
var Z = []; 
 
var M = -1; 
 
var A = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; 
 
var B = function() { 
 
    for (i = X; 0 < i; i = Math.floor(i/Y)) { 
 
     if(i % Y >= 10) { 
 
      Z.push(A[i % Y - 10]); 
 
     } else { 
 
      Z.push(i % Y); 
 
     } 
 
     M = M + 1; 
 
    } 
 
    for (j = M; j >= 0; j--) { 
 
     document.write(Z[j]); 
 
    } 
 
}; 
 

 
B(); // Call function

+0

Je pense que vous avez une erreur de comptage quelque part. 100.toString (26) = "3M" mais le vôtre produira "3O" (trois oh, pas trois zéro) – oooyaya

+0

@oooyaya En fait, ses sorties "2S", la bonne réponse. BTW, utilisez 'var x = 100; x.toString (26); ' –

+0

Cela ne sortira pas les nombres négatifs. Essayez de convertir '-1' en base' 10'. –

4

Habituellement, je utilisez cette fonction pour convertir des bases différentes.

Par exemple, il retourne "11111111" pour les deux cas: convertBase ("ff", 16, 2) ou convertBase (0xFF, 16, 2)

var convertBase = function(val, base1, base2) { 
    if (typeof(val) == "number") { 
     return parseInt(String(val)).toString(base2); 
    } else { 
     return parseInt(val.toString(), base1).toString(base2) 
    }; 
} 
+1

Simple et soigné! – NLV

11

I est venu à ce poste ayant besoin de convertir de base 10 à 62 et vice-versa. Tandis que les solutions ici sont grandes, parseInt et toString supportent seulement les bases 2 à 36.Donc, si quelqu'un se trouve dans une position similaire à moi ayant besoin de base 2 à 62, j'ai collé ma solution ci-dessous.

https://gist.github.com/ryansmith94/91d7fd30710264affeb9

function convertBase(value, from_base, to_base) { 
 
    var range = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'.split(''); 
 
    var from_range = range.slice(0, from_base); 
 
    var to_range = range.slice(0, to_base); 
 
    
 
    var dec_value = value.split('').reverse().reduce(function (carry, digit, index) { 
 
    if (from_range.indexOf(digit) === -1) throw new Error('Invalid digit `'+digit+'` for base '+from_base+'.'); 
 
    return carry += from_range.indexOf(digit) * (Math.pow(from_base, index)); 
 
    }, 0); 
 
    
 
    var new_value = ''; 
 
    while (dec_value > 0) { 
 
    new_value = to_range[dec_value % to_base] + new_value; 
 
    dec_value = (dec_value - (dec_value % to_base))/to_base; 
 
    } 
 
    return new_value || '0'; 
 
}

+0

Y at-il une variation pour les flotteurs? Par exemple. comment puis-je convertir «1.3» en base 64? – Cyoce

+0

Je ne l'ai pas fait personnellement désolé. –

+1

On dirait qu'il y a un bug quelque part. La conversion de "111222444abcdef" de la base 16 à 10 et inversement aboutit à "111222444abcdf0" – expert

4

Le schéma ci-dessous peut aider. Notez que pour convertir de la base 16 à la base 2 vous devez convertir d'abord à la base 10 et la base puis 2.

Base conversion

-1

votre propre méthode de récursion pour créer des conversions de Base2.

Comme mentionné ci-dessus par les utilisateurs let n = 13; console.log(n.toString(2)); se traduira par 13 conversion de la base 10 à la base 2.

Mais dans le cas si vous voulez programmer la même chose. J'ai écrit une méthode récursive pour faire de même. qui simplement divisent par 2 et compte ensuite les restes.

// @author Tarandeep Singh :: Created recursive converter from base 10 to base 2 
 
// @date : 2017-04-11 
 
// Convert Base 10 to Base 2, We should reverse the output 
 
// For Example base10to2(10) = "0101" just do res = base10to2(10).split('').reverse().join(); 
 
function base10to2(val, res = '') { 
 
    if (val >= 2) { 
 
    res += '' + val % 2; 
 
    return base10to2(val = Math.floor(val/2), res); 
 
    } else { 
 
    res += '' + 1 
 
    return res; 
 
    } 
 
} 
 

 
let n = 13; 
 

 
var result = base10to2(n).split('').reverse().join(); 
 
document.write(`Converting ${n} into Base2 is ${result}`);

0

Vous pouvez également convertir nombre en hexadécimal en décimal comme suit:

var a="8F"; 
var b=a.split(""); 
var result=0;var hex_multiplier=1; 
for(var i=0;i<b.length;i++){ 
    result +=parseInt(b[i],16)*hex_multiplier; 
    hex_multiplier *=16; 
} 
console.log(result); 

où vous pouvez changer avec un nombre hexadécimal et obtenir le résultat sous forme décimale.

Questions connexes