Muy buen mйtodo, gracias
Pero acabo de hacer algo diferente, cree dos funciones para codificar y decodificar un arreglo de forma binaria, y a decir verdad resulto mбs rбpido y utiliza menos memoria para cuando los nъmeros tienen mбs de 5 dнgitos ( >= 10000) y aparte no necesito usar sscanf.
pawn Код:
stock codificar(arreglo[], resultado[], length) //en length ponen el tamaсo del array que deseen codificar
{
new indexS = 0;
new num[4][2] = {
{127, 128},
{32512, 32768},
{8323072, 8388608},
{2130706432, -2147483648}
};
for(new i = 0; i < length; i++)
{
new errata = 0;
for(new j = 0; j < 4; j++)
{
resultado[indexS + j] = (arreglo[i] & num[j][0]) >>> (j * 8);
errata |= (arreglo[i] & num[j][1])?(1 << j):(0);
if(resultado[indexS + j] == 0) resultado[indexS + j] = 128;
}
if(errata == 0) errata = 128;
resultado[indexS + 4] = errata;
indexS += 5;
}
return 1;
}
stock decodificar(arreglo[], resultado[])
{
new indexR = 0;
new idx = 0;
for(new i = 0; arreglo[i] != 0; i++)
{
if(idx == 32)
{
if(arreglo[i] != 128)
{
if(arreglo[i] & 1) resultado[indexR] |= 128;
if(arreglo[i] & 2) resultado[indexR] |= 32768;
if(arreglo[i] & 4) resultado[indexR] |= 8388608;
if(arreglo[i] & 8) resultado[indexR] |= -2147483648;
}
idx = 0;
indexR++;
continue;
}
if(arreglo[i] != 128)
{
resultado[indexR] |= (arreglo[i] << idx);
}
idx += 8;
}
return 1;
}
Y considerando todas las posibilidades se puede decir que es mejor, ya que por ejemplo un arreglo de tamaсo 63 en el peor de los casos en todos los slots el numero serнa de -2147483648 (11 caracteres) e incluyendo el caracter separador se necesitarнa un string de tamaсo 756 y con las funciones de codificar y decodificar se reducirнa a un string de tamaсo 315 (se reduce mбs de la mitad).
En cuestiones de probabilidad en 10000^63 posibilidades, el mйtodo que jovanny posteo utiliza menos espacio que mi mйtodo. Y con mi mйtodo existen 4294957295^63 posibles casos en que mi mйtodo utiliza menos espacio.
En cuestiones de tiempo de procesamiento no estoy seguro, despuйs harй las pruebas para saber cual es el que corra mбs rбpido.
Sй que parece una tonterнa el estar calculando todo eso, pero a mi me parece algo increнble para admirar xd.