web-dev-qa-db-fra.com

Comment convertir une représentation binaire d'un nombre de chaîne en nombre entier en JavaScript?

Quelqu'un peut-il me donner quelques conseils s'il vous plaît?

J'ai une chaîne, par exemple "01001011" et ce que je dois faire est de l'inverser, j'ai donc utilisé .split('') que .reverse() et maintenant je dois lire le tableau comme une chaîne et le convertir en entier. C'est possible?

Merci

31
david

Si vous souhaitez reconvertir le tableau en chaîne, utilisez join() ( MDN ) et pour convertir une chaîne en entier, utilisez parseInt() ( MDN ). Le deuxième argument de ce dernier est un radix facultatif.

JavaScript va essayer de déterminer quel radix utiliser, mais pour être sûr, vous devez toujours ajouter votre radix manuellement. Citant de MDN:

Si radix n'est pas défini ou 0, JavaScript suppose ce qui suit:

  • Si la chaîne d'entrée commence par "0x" ou "0X", le radix est 16 (hexadécimal).

  • Si la chaîne d'entrée commence par "0", radix est huit (octal). Cette fonctionnalité n'est pas standard, et certaines implémentations ne la prennent délibérément pas en charge (à la place, elles utilisent le radix 10). Pour cette raison, spécifiez toujours un radix lorsque vous utilisez parseInt.

  • Si la chaîne d'entrée commence par une autre valeur, le radix est 10 (décimal).

Donc, dans votre cas, le code suivant devrait fonctionner:

var a = '01001011';

var b = parseInt( a.split('').reverse().join(''), 2 );

ou simplement (si vous souhaitez convertir la chaîne de départ, sans l'inversion):

var b = parseInt( a, 2 );
49
Sirko

Appelez simplement parseInt avec un radix différent, dans ce cas, utilisez 2 pour le binaire.

var a = parseInt("01001011", 2);
// a === 75

parseInt tente de comprendre le radix lui-même lorsque vous ne le spécifiez pas explicitement. Du Mozilla Developer Network :

Si radix est undefined ou 0, JavaScript suppose ce qui suit:

  • Si l'entrée string commence par "0x" ou "0X", le radix est 16 (hexadécimal).
  • Si l'entrée string commence par "0", radix est huit (octal). Cette fonctionnalité n'est pas standard, et certaines implémentations ne la prennent délibérément pas en charge (à la place, elles utilisent le radix 10). Pour cette raison spécifiez toujours un radix lorsque vous utilisez parseInt.
  • Si l'entrée string commence par une autre valeur, le radix est 10 (décimal).

Dans ce cas, il est essentiel que vous spécifiez le radix, sinon il peut être interprété comme un nombre décimal ou octal. En règle générale, spécifiez toujours le radix.

15
Mattias Buelens

Cela prendra un hex tampon et le convertira en une chaîne binaire et reviendra à l'hex tampon.

REMARQUE: quand je dis un hex de tampon, je veux dire une valeur décimale car lorsque vous parcourez un tampon et tirez chaque élément du tableau, cela vous donne la valeur décimale (par exemple: 210, au lieu de d2).

var buffer - new Buffer([0, 210, 242]); // Node

// var arrayBuffer = new ArrayBuffer(3); // JavaScript

// var uint8 = new Uint8Array(arrayBuffer); // JavaScript/ 16Array, 32Array, etc

Besoin de connaître les tampons

Vous allez parcourir le tampon avec une for(){} et à l'intérieur, vous pouvez faire quelque chose comme:

(210).toString(2); // '11010010'

(210).toString(16); // 'd2' (untested)

(210).toString(8); // (Octal-Digits representation)

parseInt((210).toString(2), 2); // 210

parseInt((210).toString(2), 2).toString(16); // 'd2'

De toute évidence, au lieu d'utiliser "(210).toString(2)" IN YOU FOR LOOP, vous utiliseriez "(buffer[i]).toString(2)"

Endian Rep dépend de vous! :) (array.reverse ())

J'espère que cela t'aides!

PS. parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2

parseInt((210).toString(2).substring(5, 8), 2); // 2

2
Cody