#include <stdio.h>
#include <string.h>
unsigned long binarioToDecimal(char *binario, int length){
int a;
unsigned long decimal = 0;
unsigned long peso = 1;
binario += length - 1;
peso = 1;
//Vamos a recorrer el for tantas veces como indique length,
//nada nuevo, pero tener encuenta que binario decrece,
//el numero de bytes de su tipo de datos
//saltamos hacia atras el tamaño de char "8" porque aunque 8 bits, son ocho digitos "01",
//un byte, un char son "8" osea que 8 representa uno que es un simbolo digamos 0 o 1, al
//al ser un char donde esta almacenado y no se esta accediendo a los bit puros realmente.
//se envia un length de 8, que simulan los 8 bits, pero realmente al ser caracteres no son
//1 byte sino 8 * 1.
for(a = 0; a < length; ++a, --binario){
if(*binario == '1'){
decimal += peso;
}
//
peso *= 2;
}
return decimal;
}
void binarioToText(char *informacionBin, int informacionLength, int sim, char *text ){
int a;
for(a = 0; a < informacionLength; a += 8, informacionBin += 8){
char *byte = informacionBin;
//Arimetica de punteros
//*(byte+8) = '\0';
//azucar para lo anterior
byte[8] = '\0';
//lo que nos retorna lo añadimos y asi hasta leer enviar toda la informacion
*text ++ = binarioToDecimal(byte, 8);
}
//text -= sim;
}
int main(void)
{
//Test contiene la informacion.
char informacion[] = "010000100110100101100101011011100111011001100101011011100110100101100100011011110010000001100001001000000101001101110100011000010110001101101011010011110111011001100101011100100110011001101100011011110111011100101110";
//Se usara para mostrar la informacion
char *textDeco;
int informacionLength, sim;
//usamos strlen
informacionLength
= strlen(informacion
);
/*
para codificar cualquier caracter ASCII en binario,
necesitamos al menos 7 bits, en la practica se añade
un octavo bit y se utiliza como bit de paridad para detectar errores
de transmision.
Sin embargo, estos 8 bits (1 byte) también permiten representar un
mayor rango de caracteres ver ASCII extendido
*/
//basandonos en lo anterior hacemos estas matematicas, puesto que cada simbolo "consta"
//de 8 (digamos un octeto) operamos y mas uno para la terminacion.
sim = informacionLength / 8 + 1;
//malloc
binarioToText(informacion, informacionLength, sim, textDeco);
printf("La informacion contenida en ASCII: %s\n", textDeco
);
//free
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnVuc2lnbmVkIGxvbmcgYmluYXJpb1RvRGVjaW1hbChjaGFyICpiaW5hcmlvLCBpbnQgbGVuZ3RoKXsKCiAgICAgICAgaW50IGE7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZGVjaW1hbCA9IDA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwZXNvID0gMTsKCiAgICAgICAgYmluYXJpbyArPSBsZW5ndGggLSAxOwogICAgICAgIHBlc28gPSAxOwoKICAgICAgICAvL1ZhbW9zIGEgcmVjb3JyZXIgZWwgZm9yIHRhbnRhcyB2ZWNlcyBjb21vIGluZGlxdWUgbGVuZ3RoLAogICAgICAgIC8vbmFkYSBudWV2bywgcGVybyB0ZW5lciBlbmN1ZW50YSBxdWUgYmluYXJpbyBkZWNyZWNlLAogICAgICAgIC8vZWwgbnVtZXJvIGRlIGJ5dGVzIGRlIHN1IHRpcG8gZGUgZGF0b3MKCiAgICAgICAgLy9zYWx0YW1vcyBoYWNpYSBhdHJhcyBlbCB0YW1hw7FvIGRlIGNoYXIgIjgiIHBvcnF1ZSBhdW5xdWUgOCBiaXRzLCBzb24gb2NobyBkaWdpdG9zICIwMSIsCiAgICAgICAgLy91biBieXRlLCB1biBjaGFyIHNvbiAiOCIgb3NlYSBxdWUgOCByZXByZXNlbnRhIHVubyBxdWUgZXMgdW4gc2ltYm9sbyBkaWdhbW9zIDAgbyAxLCBhbAogICAgICAgIC8vYWwgc2VyIHVuIGNoYXIgZG9uZGUgZXN0YSBhbG1hY2VuYWRvIHkgbm8gc2UgZXN0YSBhY2NlZGllbmRvIGEgbG9zIGJpdCBwdXJvcyByZWFsbWVudGUuCgogICAgICAgIC8vc2UgZW52aWEgdW4gbGVuZ3RoIGRlIDgsIHF1ZSBzaW11bGFuIGxvcyA4IGJpdHMsIHBlcm8gcmVhbG1lbnRlIGFsIHNlciBjYXJhY3RlcmVzIG5vIHNvbgogICAgICAgIC8vMSBieXRlIHNpbm8gOCAqIDEuCgogICAgICAgIGZvcihhID0gMDsgYSA8IGxlbmd0aDsgKythLCAtLWJpbmFyaW8pewoKICAgICAgICAgICAgaWYoKmJpbmFyaW8gPT0gJzEnKXsKICAgICAgICAgICAgICAgIGRlY2ltYWwgKz0gcGVzbzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8KICAgICAgICAgICAgcGVzbyAqPSAyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGRlY2ltYWw7CiAgICB9CgogICAgdm9pZCBiaW5hcmlvVG9UZXh0KGNoYXIgKmluZm9ybWFjaW9uQmluLCBpbnQgaW5mb3JtYWNpb25MZW5ndGgsIGludCBzaW0sIGNoYXIgKnRleHQgKXsKCiAgICBpbnQgYTsKCiAgICBmb3IoYSA9IDA7IGEgPCBpbmZvcm1hY2lvbkxlbmd0aDsgYSArPSA4LCBpbmZvcm1hY2lvbkJpbiArPSA4KXsKCiAgICAgICAgY2hhciAqYnl0ZSA9IGluZm9ybWFjaW9uQmluOwoKICAgICAgICAvL0FyaW1ldGljYSBkZSBwdW50ZXJvcwogICAgICAgIC8vKihieXRlKzgpID0gJ1wwJzsKCiAgICAgICAgLy9henVjYXIgcGFyYSBsbyBhbnRlcmlvcgogICAgICAgIGJ5dGVbOF0gPSAnXDAnOwoKICAgICAgICAvL2xvIHF1ZSBub3MgcmV0b3JuYSBsbyBhw7FhZGltb3MgeSBhc2kgaGFzdGEgbGVlciBlbnZpYXIgdG9kYSBsYSBpbmZvcm1hY2lvbgogICAgICAgICp0ZXh0ICsrID0gYmluYXJpb1RvRGVjaW1hbChieXRlLCA4KTsKICAgIH0KCiAgICAvL3RleHQgLT0gc2ltOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICAvL1Rlc3QgY29udGllbmUgbGEgaW5mb3JtYWNpb24uCiAgICBjaGFyIGluZm9ybWFjaW9uW10gPSAiMDEwMDAwMTAwMTEwMTAwMTAxMTAwMTAxMDExMDExMTAwMTExMDExMDAxMTAwMTAxMDExMDExMTAwMTEwMTAwMTAxMTAwMTAwMDExMDExMTEwMDEwMDAwMDAxMTAwMDAxMDAxMDAwMDAwMTAxMDAxMTAxMTEwMTAwMDExMDAwMDEwMTEwMDAxMTAxMTAxMDExMDEwMDExMTEwMTExMDExMDAxMTAwMTAxMDExMTAwMTAwMTEwMDExMDAxMTAxMTAwMDExMDExMTEwMTExMDExMTAwMTAxMTEwIjsKCiAgICAvL1NlIHVzYXJhIHBhcmEgbW9zdHJhciBsYSBpbmZvcm1hY2lvbgogICAgY2hhciAqdGV4dERlY287CgogICAgaW50IGluZm9ybWFjaW9uTGVuZ3RoLCBzaW07CgogICAgLy91c2Ftb3Mgc3RybGVuCiAgICBpbmZvcm1hY2lvbkxlbmd0aCA9IHN0cmxlbihpbmZvcm1hY2lvbik7CgogICAgLyoKICAgIHBhcmEgY29kaWZpY2FyIGN1YWxxdWllciBjYXJhY3RlciBBU0NJSSBlbiBiaW5hcmlvLCAKICAgIG5lY2VzaXRhbW9zIGFsIG1lbm9zIDcgYml0cywgZW4gbGEgcHJhY3RpY2Egc2UgYcOxYWRlIAogICAgdW4gb2N0YXZvIGJpdCB5IHNlIHV0aWxpemEgY29tbyBiaXQgZGUgcGFyaWRhZCBwYXJhIGRldGVjdGFyIGVycm9yZXMKICAgIGRlIHRyYW5zbWlzaW9uLiAKICAgIFNpbiBlbWJhcmdvLCBlc3RvcyA4IGJpdHMgKDEgYnl0ZSkgdGFtYmnDqW4gcGVybWl0ZW4gcmVwcmVzZW50YXIgdW4gCiAgICBtYXlvciByYW5nbyBkZSBjYXJhY3RlcmVzIHZlciBBU0NJSSBleHRlbmRpZG8KICAgICovCgogICAgLy9iYXNhbmRvbm9zIGVuIGxvIGFudGVyaW9yIGhhY2Vtb3MgZXN0YXMgbWF0ZW1hdGljYXMsIHB1ZXN0byBxdWUgY2FkYSBzaW1ib2xvICJjb25zdGEiCiAgICAvL2RlIDggKGRpZ2Ftb3MgdW4gb2N0ZXRvKSBvcGVyYW1vcyB5IG1hcyB1bm8gcGFyYSBsYSB0ZXJtaW5hY2lvbi4gCiAgICBzaW0gPSBpbmZvcm1hY2lvbkxlbmd0aCAvIDggKyAxOwoKICAgIC8vbWFsbG9jCiAgICB0ZXh0RGVjbyA9IG1hbGxvYyhzaW0gKyAxKTsKCiAgICBiaW5hcmlvVG9UZXh0KGluZm9ybWFjaW9uLCBpbmZvcm1hY2lvbkxlbmd0aCwgc2ltLCB0ZXh0RGVjbyk7CgogICAgcHJpbnRmKCJMYSBpbmZvcm1hY2lvbiBjb250ZW5pZGEgZW4gQVNDSUk6ICVzXG4iLCB0ZXh0RGVjbyk7CgogICAgLy9mcmVlCiAgICBmcmVlKHRleHREZWNvKTsKCiAgICByZXR1cm4gMDsKfQ==