Imprimir una palabra en binario[?]

Iniciado por Slava_TZD, 8 Mayo 2011, 16:43 PM

0 Miembros y 3 Visitantes están viendo este tema.

Slava_TZD

Buenas, estoy haciendo un pequeño programa que pase una cadena de texto a binario, tengo algo así:
#include <stdio.h>
#include <string.h>
main()
{
   char palabra[10];
   int desc[10],i=0,a,bin[80],inter,k,c,b;
   printf("Introduce una palabra: ");
   scanf("%s", palabra);
   a=strlen(palabra);
   for(i;i<a;i++)
   {
       desc[i]=palabra[i];
   }
   for(i=0;i<9;i++)
   {

       b=desc[0]/2;
       c=desc[0]%2;
       desc[0]=b;
       bin[i]=c;
       if(desc[0]==0 || desc[0]==1)
       {
           i++;
           b=desc[0]/2;
           c=desc[0]%2;
           desc[0]=b;
           bin[i]=c;
           break;
       }
   }
   for(i=7;i>-1;i--) printf("%d", bin[i]);

}


Con esto imprimo con exíto una sola letra, le he estado dando vueltas a ver como pasar desc[10] a binario y nada...he intentado con algo así:

k=0;
   do
   {
   for(i=k;i<k+7;i++)
   {

       b=desc[m]/2;
       c=desc[m]%2;
       desc[m]=b;
       bin[i]=c;
       if(desc[m]==0 || desc[m]==1)
       {
           i++;
           b=desc[m]/2;
           c=desc[m]%2;
           desc[m]=b;
           bin[i]=c;
           break;
       }
   }
   m++;
   k=k+7;
   }while(m<=a);

Pero no me funciona :( ¿Alguien me da una ayuda?

EDITO: ¿Supongo que no habrá una forma directa de trabajar con binario en C como si la hay en otros lenguajes no?


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

Akai

Tu primer problema está en que una cadena de texto la componen chars, que ocupan 8 bits, es decir, cada char necesitaría estar representado por un vector de 8 bits, no por 1 bit como haces tu en tu código.

Por otro lado, tienes lo siguiente: si tu a un char, le asignas el valor de un entero, va a poner el valor ASCII asociado a ese entero, es decir, para 0, te va a poner el final de cadena.

Si lo que quieres es pasar un entero a binario, hay otras formas que no implican cadenas de carácteres sino divisiones entre del propio número y obtener el resto.

Slava_TZD

Cita de: Akai en  8 Mayo 2011, 17:55 PM
Tu primer problema está en que una cadena de texto la componen chars, que ocupan 8 bits, es decir, cada char necesitaría estar representado por un vector de 8 bits, no por 1 bit como haces tu en tu código.

Por otro lado, tienes lo siguiente: si tu a un char, le asignas el valor de un entero, va a poner el valor ASCII asociado a ese entero, es decir, para 0, te va a poner el final de cadena.

Si lo que quieres es pasar un entero a binario, hay otras formas que no implican cadenas de carácteres sino divisiones entre del propio número y obtener el resto.

La cosa es que el fin del programa no acaba en pasar una cadena a binario, por lo que primero paso caracter a caracter a un vector y luego es cada numero del vector lo que deseo pasar a binario y almacenarlo en el otro vector. Si es posible dime alguna otra forma de hacerlo, he buscado alguna funcion o algo..pero na ;)


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

Slava_TZD

#3
Solucionado al final he hecho algo así, luego para leerlo le doy la vuelta cada 8 posiciones al vector bin e imprimo:

#include <stdio.h>
#define BITS 8
main()
{
   int desc[10],i, tamanyo, bin[80], b, n, c, g;
   tamanyo = i = b = n = c = g = 0;
   printf("letras (max 10 caracteres): ");
   while((desc[tamanyo]=getchar())!='\n')
   {
       ++tamanyo;
       if(tamanyo>=10) exit(1);
   }
   while(g<tamanyo)
   {
       while(i<BITS)
       {
           b=desc[g]/2;
           c=desc[g]%2;
           desc[g]=b;
           bin[n]=c;
           ++i;
           ++n;
       }
       g++;
       i=0;
   }
}


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.