2012-06-19 20 views
21

¿Alguien puede darme un pequeño consejo, por favor?Convertir la representación binaria del número de la cadena a int -Javascript

Tengo una cadena, por ejemplo "01001011" y lo que tengo que hacer es invertirla, así que usé .split('') que .reverse() y ahora tengo que leer la matriz como una cadena y convertirla a un número entero. ¿Es posible?

Gracias

+0

Si usted quiere hacer lo contrario de esto, vea aquí: http://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary- in-javascript –

Respuesta

39

Si desea convertir la matriz de volver a utilizar una cadena join() (MDN) y para convertir una cadena en un número entero uso parseInt() (MDN). El segundo argumento de la última es una raíz opcional.

JavaScript intentará determinar qué raíz usar, pero para asegurarse de que siempre debe agregar su raíz manualmente. Citando de MDN:

Si radix es indefinido o 0, JavaScript asume lo siguiente:

  • Si la cadena de entrada comienza con "0x" o "0x", la base es 16 (hexadecimal).

  • Si la cadena de entrada comienza con "0", la raíz es ocho (octal). Esta característica no es estándar, y algunas implementaciones deliberadamente no la admiten (en cambio, usan el radix 10). Por este motivo, siempre especifique una raíz cuando use parseInt.

  • Si la cadena de entrada comienza con cualquier otro valor, la raíz es 10 (decimal).

Así que en su caso el siguiente código debería funcionar:

var a = '01001011'; 

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

o simplemente (si es que se quiere convertir la cadena de partida, sin la reversión):

var b = parseInt(a, 2); 
12

Sólo tiene que llamar parseInt con una base diferente, en este caso de uso 2 para binario.

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

parseInt intentos de averiguar la raíz sí mismo cuando no se especifica explícitamente. From the Mozilla Developer Network:

Si radix es undefined o 0, JavaScript supone lo siguiente:

  • Si la entrada string comienza con "0x" o "0X", radix es 16 (hexadecimal).
  • Si la entrada string comienza con "0", la raíz es ocho (octal). Esta característica no es estándar, y algunas implementaciones deliberadamente no la admiten (en cambio, usan el radix 10). Por esta razón, siempre especifique una raíz cuando se usa parseInt.
  • Si la entrada string comienza con cualquier otro valor, la raíz es 10 (decimal).

En este caso, es crucial que usted hace especificar la raíz, ya que de lo contrario puede ser interpreta como un decimal o un número octal. Como regla general, siempre especifique la raíz.

+1

Tenga en cuenta que en este caso, la raíz por defecto es en realidad 8, ya que la cadena comienza con '0'. –

2

Esto tomará un hex de memoria intermedia y lo convertirá en una cadena binaria y volverá al hexágono de la memoria intermedia.

NOTA: cuando digo un buffer hexadecimal, me refiero a un valor decimal porque cuando iteras sobre un buffer y extraes cada elemento del array, te da el valor decimal (p. Ej .: 210 en lugar 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

necesitan familiarizarse con tampones

Vas a iterar sobre el tampón con un for(){} y en el interior se puede hacer algo como:

(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'

Obviamente, en lugar de utilizar "(210).toString(2)" EN POR BUCLE, se utiliza "(buffer[i]).toString(2)"

Endian Rep es ¡Depende de usted! :) (array.reverse())

Espero que esto ayude!

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

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

Cuestiones relacionadas