La función que posteas,
MaBoRaK:
Código PHP:
function Dec2Hex(Decimal) {
var hexChars = "0123456789ABCDEF";
var a = Decimal % 16;
var b = (Decimal - a)/16;
hex = "" + hexChars.charAt(b) + hexChars.charAt(a);
return hex;
}
Equivale a
Código PHP:
Decimal.toString(16);
El toString actúa sobre un número y directamente te lo devuelve en tipo String y pasado a la base que indiques por argumento.
De la misma manera, toString(2) te lo pasará a binario. Sólo tienes que sacar el numerito de cada caracter y hacerle un toString(2):
Código PHP:
String.prototype.toBase=function(base) {
for(var i=0, dev=""; i<this.length; i++)
dev+= this.charCodeAt(i).toString(base);
return dev;
}
Esta función te servirá para pasar cualquier cadena a su equivalente matemático en cualquier base (entre 2 y 36 incluídos los dos).
Y como me aburría un poco he decidido crear la función inversa, la que pasa de la cadena que creamos anteriormente a la cadena original:
Código PHP:
String.prototype.toChar=function(fromBase) {
//iremos cogiendo cada número, convirtiéndolo a base decimal y hallando la letra que corresponde ese número
//no sabemos qué delimita un número en ninguna base si están escritos sin espacios, pero sabemos que en base 10 el número ha de estar entre 65(A) y 122(z) (incluiremos algunos símbolos pero a efectos nos da igual)
var dev=""; //guardaremos aquí las letras a devolver
var posIni=0, posFin=1; //posIni y posFin delimitarán el número en this
//iremos aumentando posFin hasta que el número, convertido a base 10, esté entre 65 y 122
while(posFin<=this.length) { //iremos extrayendo numeros mientas posFin no llegue al final de this
var convertido=this.substring(posIni,posFin); //convertido: parte de this a estudiar
convertido= parseInt( convertido, fromBase ); //la pasamos a base 10
while( Number(convertido)<65 || Number(convertido)>122 ) { //mientras no sea una letra
posFin++; //aumentamos posFin
convertido= this.substring(posIni,posFin); //rehacemos convertido para volver a estudiarlo
convertido= parseInt( convertido, fromBase );
}
//en este punto convertido es un número en base 10 que representa una letra
//convertiremos ese número a su respectivo caracter, y lo añadiremos a la cadena a devolver
dev+=String.fromCharCode(convertido);
//posIni pasará a ser posFin, y posFin será posFin+1 para buscar más números en la cadena this
posIni=posFin; posFin++;
}
//en este punto dev contendrá todos los caracteres a devolver
return dev;
}
Está muy comentado para que se entienda todo bien. De todas maneras si no se ve algo, postead. Me he apoyado en parseInt(numero,baseOriginal) para pasar un numero en base baseOriginal a base decimal.
Con estas dos funciones haremos:
Código PHP:
var cadena="derkeNuke";
var base=16;
var laConvertida=cadena.toBase(base);
var laOriginal=laConvertida.toChar(base);
document.write( "La cadena <b>"+cadena+"</b> convertida a base "+base+" da como resultado <b>"+laConvertida+"</b>, que si la volvemos a pasar a original obtendremos <b>"+laOriginal+"</b>.");
Obteniendo como resultado:
Código:
La cadena derkeNuke convertida a base 16 da como resultado 6465726b654e756b65, que si la volvemos a pasar a original obtendremos derkeNuke.
Espero que os guste el script
Saludos a los dos!