Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Slava_TZD en 8 Mayo 2011, 16:43 PM

Título: Imprimir una palabra en binario[?]
Publicado por: Slava_TZD en 8 Mayo 2011, 16:43 PM
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?
Título: Re: Imprimir una palabra en binario[?]
Publicado por: 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.
Título: Re: Imprimir una palabra en binario[?]
Publicado por: Slava_TZD en 8 Mayo 2011, 18:53 PM
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 ;)
Título: Re: Imprimir una palabra en binario[?]
Publicado por: Slava_TZD en 9 Mayo 2011, 08:42 AM
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;
   }
}