Conversione di una stringa da ASCII a binario e da binaro a ASCII con Javascript

Si ricava il codice decimale del carattere nella tabella ASCII, gli si cambia base (da base 2 a base 10) e quello che otteniamo è un numero binario.

Questo post potrebbe essere la seconda parte del post escape completo di una stringa, infatti la teoria è praticamente la stessa:

Si ricava il codice decimale del carattere nella tabella ASCII, gli si cambia base (da base 2 a base 10) e quello che otteniamo è un numero binario. Ecco un esempio in Javascript:

// binaries and ascii
function asciiToBin(string){
	var bin='';
	for(i=0;i<string.length;i++){
		bin+=strPadLeft(string.charCodeAt(i).toString(2),8);
	}
	return bin;
}

function strPadLeft(n,l){
	while(n.length<l){
		n='0'+n;
	}
	return n;
}

Anche in questo caso utilizziamo toString per cambiare base ad un numero, e la funzione strPadLeft per “riempire” di zeri i numeri più corti di otto caratteri.

Per la riconversione in ASCII le cose si complicano un po’, infatti in questo caso non abbiamo una funzione simile a unescape che fa ritornare tutto come prima.

Per la riconversione potremmo quindi utilizzare la funzione di Javascript parseInt per ogni ottavina (serie di otto bit) ottenuta.

Infatti utilizzata in queso modo, la funzione parseInt converte il numero binario 00000011 in numero decimale:

parseInt('00000011', 2);

Il risultato sarebbe 3.

Ecco di seguito una funzione di conversione ASCII binario che utilizza la funzione parseInt:

function binToAscii(bin){
	var ascii='';
	for(var i=0;i<bin.length;i+=8){
		ascii += String.fromCharCode(parseInt(bin.substr(i,8),2));
	}
	return ascii;
}

In alternativa potremmo utilizzare una funzione più teorica. Per convertire un numero da qualsiasi base numerica in basa decimale, si prende il numero di minor peso (quello più a sinistra) e lo si moltiplica per la sua base elevata alla zero. Il risultato viene sommato al secondo numero moltiplicato per la sua base elevata alla prima e così via.

Quindi un numero in base 2 (binario) come il seguente, potrebbe essere trasformato in numero decimale nel seguente modo:

101 = (1*2^0)+(0*2^1)+(1*2^2) = 1+0+4 = 5;

Possiamo riprodurre la stessa logica con una funzione:

function byteToDecimal(by){
	var dec = 0;
	for(var i=0;i<by.length;i++){
		dec += Math.pow(2,i)*by.substr(by.length-(i+1),1);
	}
	return dec;
}

Per chi fosse interessato rimando a questo articolo sui sistemi di numerazione per approfondimenti.

Hai trovato interessante questo articolo? Se vuoi, inscrivendoti alla newsletter, puoi ricevere una notifica ogni volta che c'è un nuovo articolo da leggere, oppure puoi sottoscrivere il feed RSS. Se non sai cos'è puoi leggere: Cos'è e come si legge un feed.
di Francesco Terenzani, 16 June 2008

post<li>

tag: , , .

post correlati:


Commenti. Commenti in formato RSS

  1. Ancora nessun commento.

Scrivi un commento

XHTML: Puoi usare questi tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>