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.
tag: ASCII Table, codice binario, Javascript.
post correlati:
- Escape completo di una stringa ASCII con Javascript o PHP
- Tracciare link esterni e download con Google Analytics Asincrono
- Una API per Google Maps in stile jQuery
- Tracciare link esterni e download con Google Analytics
- Uno Userscript per scrivere "limone"
- Utility Javascript per tracciare link esterni e download con Google Analytics
- Filtri CSS per Opera browser
Commenti.
Scrivi un commento