2012-06-19 18 views
21

qualcuno può darmi un piccolo consiglio per favore?Converti rappresentazione binaria di numero da stringa a int -Javascript

Ho una stringa, ad esempio "01.001.011" e che cosa devo fare è per invertire, così ho usato .split('') di .reverse() e ora bisogno di leggere la matrice come stringa e convertirlo in un intero. È possibile?

Grazie

+0

Se si vuole fare l'inverso di questo, vedere qui: http://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary- in-javascript –

risposta

39

Se si desidera convertire l'array in una stringa utilizzare join() (MDN) e per la conversione di una stringa in un uso intero parseInt() (MDN). Il secondo argomento della versione successiva è una radice opzionale.

JavaScript proverà a determinare, quale radix da usare, ma per essere sicuri di dover aggiungere sempre la radix manualmente. Citando da MDN:

Se radice è definito o 0, JavaScript assume il seguente:

  • Se la stringa di input inizia con "0x" o "0X", radice è 16 (esadecimale).

  • Se la stringa di input inizia con "0", il radix è otto (ottale). Questa funzione non è standard, e alcune implementazioni deliberatamente non la supportano (utilizzando invece la radix 10). Per questo motivo, specifica sempre una radice quando usi parseInt.

  • Se la stringa di input inizia con qualsiasi altro valore, la radice è 10 (decimale).

Quindi nel tuo caso il seguente codice dovrebbe funzionare:

var a = '01001011'; 

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

o solo (se si vuole convertire la stringa di partenza, senza l'inversione):

var b = parseInt(a, 2); 
12

Basta chiamare parseInt con una radice diversa, in questo caso d'uso 2 per binario.

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

parseInt tentativi per capire la radice in sé, quando non si esplicitamente specificarlo. From the Mozilla Developer Network:

Se radice è undefined o 0, JavaScript presuppone:

  • Se l'ingresso string inizia con "0x" o "0X", radice è 16 (esadecimale).
  • Se l'ingresso string inizia con "0", il radix è otto (ottale). Questa funzione non è standard, e alcune implementazioni deliberatamente non la supportano (utilizzando invece la radix 10). Per questo motivo specificare sempre una radice quando si utilizza parseInt.
  • Se l'input string inizia con qualsiasi altro valore, la radice è 10 (decimale).

In questo caso, è fondamentale che si specifica la radice, altrimenti si può essere interpretato sia come un decimale o un numero ottale. Come regola generale, specificare sempre la radice.

+1

Si noti che in questo caso, la radice predefinita è in realtà 8, poiché la stringa inizia con '0'. –

2

Questo richiederà un buffer hex e lo convertirà in un binario str e tornerà all'esagente buffer.

NOTA: quando dico un esagono di buffer, intendo un valore decimale perché quando si esegue un'iterazione su un buffer e si tira ogni elemento nell'array, si ottiene il valore decimale (ad es. 210, invece di d2).

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

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

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

Hai bisogno di essere a conoscenza di buffer

Potrai iterazioni sul buffer con un for(){} e al suo interno si può fare qualcosa di simile:

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

Ovviamente, invece di usare "(210).toString(2)" IN TE PER LOOP, si usa "(buffer[i]).toString(2)"

Endian Rep è sta a te! :) (array.reverse())

Spero che questo aiuti!

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

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

Problemi correlati