2012-04-21 9 views
38

quiero convertir en una cadena binaria de dígitos por ejemplocómo convertir cadenas binarias a decimales?

var binary = "1101000" // code for 104 
var digit = binary.toString(10); // Convert String or Digit (But it does not work !) 
console.log(digit); 

¿Cómo es posible? Gracias

Respuesta

92

La función parseInt convierte las cadenas a números, y se necesita un segundo argumento que especifica la base en la que la representación de cadena es:

var digit = parseInt(binary, 2); 

See it in action.

+1

¿Sigue siendo relevante? 'parseInt (101, 2)' devuelve '5'. – srph

+4

@srph: Eso no es sorprendente, 101 en la base 2 es 5 en la base 10. – Jon

+1

Ah, ya veo. Debo haber entendido mal lo que el 'parseInt'. Pensé que convertiría la cadena de la base 10 -> lo que sea (pensando como 'parseInt ('5612', 2)' devolvería su forma binaria;). – srph

8

utilizar el parámetro radix de parseInt:

var binary = "1101000"; 
var digit = parseInt(binary, 2); 
console.log(digit); 
8

parseInt() con la base es una mejor solución (como se ha dicho por muchos):

Pero si se desea implementar sin parseInt, aquí es una aplicación:

function bin2dec(num){ 
    return num.split('').reverse().reduce(function(x, y, i){ 
     return (y === '1') ? x + Math.pow(2, i) : x; 
    }, 0); 
    } 
7

ES6 apoya binary numeric literals para enteros, por lo que si la cadena binaria es inmutable , Como en el ejemplo de código en la pregunta, uno sólo puede escribir en como lo es con el prefijo 0b o 0B:

var binary = 0b1101000; // code for 104 
console.log(binary); // prints 104 
0

Otra aplicación sólo para practicar JS funcional podría ser

var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c) 
 
console.log(bin2int("101010"));
donde +c coerces String tipo c a un Number tipo de valor para la adición adecuada.

Cuestiones relacionadas