fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. unsigned long binarioToDecimal(char *binario, int length){
  5.  
  6. int a;
  7.  
  8. unsigned long decimal = 0;
  9. unsigned long peso = 1;
  10.  
  11. binario += length - 1;
  12. peso = 1;
  13.  
  14. //Vamos a recorrer el for tantas veces como indique length,
  15. //nada nuevo, pero tener encuenta que binario decrece,
  16. //el numero de bytes de su tipo de datos
  17.  
  18. //saltamos hacia atras el tamaño de char "8" porque aunque 8 bits, son ocho digitos "01",
  19. //un byte, un char son "8" osea que 8 representa uno que es un simbolo digamos 0 o 1, al
  20. //al ser un char donde esta almacenado y no se esta accediendo a los bit puros realmente.
  21.  
  22. //se envia un length de 8, que simulan los 8 bits, pero realmente al ser caracteres no son
  23. //1 byte sino 8 * 1.
  24.  
  25. for(a = 0; a < length; ++a, --binario){
  26.  
  27. if(*binario == '1'){
  28. decimal += peso;
  29. }
  30.  
  31. //
  32. peso *= 2;
  33. }
  34.  
  35. return decimal;
  36. }
  37.  
  38. void binarioToText(char *informacionBin, int informacionLength, int sim, char *text ){
  39.  
  40. int a;
  41.  
  42. for(a = 0; a < informacionLength; a += 8, informacionBin += 8){
  43.  
  44. char *byte = informacionBin;
  45.  
  46. //Arimetica de punteros
  47. //*(byte+8) = '\0';
  48.  
  49. //azucar para lo anterior
  50. byte[8] = '\0';
  51.  
  52. //lo que nos retorna lo añadimos y asi hasta leer enviar toda la informacion
  53. *text ++ = binarioToDecimal(byte, 8);
  54. }
  55.  
  56. //text -= sim;
  57. }
  58.  
  59. int main(void)
  60. {
  61. //Test contiene la informacion.
  62. char informacion[] = "010000100110100101100101011011100111011001100101011011100110100101100100011011110010000001100001001000000101001101110100011000010110001101101011010011110111011001100101011100100110011001101100011011110111011100101110";
  63.  
  64. //Se usara para mostrar la informacion
  65. char *textDeco;
  66.  
  67. int informacionLength, sim;
  68.  
  69. //usamos strlen
  70. informacionLength = strlen(informacion);
  71.  
  72. /*
  73.   para codificar cualquier caracter ASCII en binario,
  74.   necesitamos al menos 7 bits, en la practica se añade
  75.   un octavo bit y se utiliza como bit de paridad para detectar errores
  76.   de transmision.
  77.   Sin embargo, estos 8 bits (1 byte) también permiten representar un
  78.   mayor rango de caracteres ver ASCII extendido
  79.   */
  80.  
  81. //basandonos en lo anterior hacemos estas matematicas, puesto que cada simbolo "consta"
  82. //de 8 (digamos un octeto) operamos y mas uno para la terminacion.
  83. sim = informacionLength / 8 + 1;
  84.  
  85. //malloc
  86. textDeco = malloc(sim + 1);
  87.  
  88. binarioToText(informacion, informacionLength, sim, textDeco);
  89.  
  90. printf("La informacion contenida en ASCII: %s\n", textDeco);
  91.  
  92. //free
  93. free(textDeco);
  94.  
  95. return 0;
  96. }
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
La informacion contenida en ASCII: Bienvenido a StackOverflow.