Foro de elhacker.net

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í:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. main()
  4. {
  5.    char palabra[10];
  6.    int desc[10],i=0,a,bin[80],inter,k,c,b;
  7.    printf("Introduce una palabra: ");
  8.    scanf("%s", palabra);
  9.    a=strlen(palabra);
  10.    for(i;i<a;i++)
  11.    {
  12.        desc[i]=palabra[i];
  13.    }
  14.    for(i=0;i<9;i++)
  15.    {
  16.  
  17.        b=desc[0]/2;
  18.        c=desc[0]%2;
  19.        desc[0]=b;
  20.        bin[i]=c;
  21.        if(desc[0]==0 || desc[0]==1)
  22.        {
  23.            i++;
  24.            b=desc[0]/2;
  25.            c=desc[0]%2;
  26.            desc[0]=b;
  27.            bin[i]=c;
  28.            break;
  29.        }
  30.    }
  31.    for(i=7;i>-1;i--) printf("%d", bin[i]);
  32.  
  33. }

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í:

Código
  1. k=0;
  2.    do
  3.    {
  4.    for(i=k;i<k+7;i++)
  5.    {
  6.  
  7.        b=desc[m]/2;
  8.        c=desc[m]%2;
  9.        desc[m]=b;
  10.        bin[i]=c;
  11.        if(desc[m]==0 || desc[m]==1)
  12.        {
  13.            i++;
  14.            b=desc[m]/2;
  15.            c=desc[m]%2;
  16.            desc[m]=b;
  17.            bin[i]=c;
  18.            break;
  19.        }
  20.    }
  21.    m++;
  22.    k=k+7;
  23.    }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
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:

Código
  1. #include <stdio.h>
  2. #define BITS 8
  3. main()
  4. {
  5.    int desc[10],i, tamanyo, bin[80], b, n, c, g;
  6.    tamanyo = i = b = n = c = g = 0;
  7.    printf("letras (max 10 caracteres): ");
  8.    while((desc[tamanyo]=getchar())!='\n')
  9.    {
  10.        ++tamanyo;
  11.        if(tamanyo>=10) exit(1);
  12.    }
  13.    while(g<tamanyo)
  14.    {
  15.        while(i<BITS)
  16.        {
  17.            b=desc[g]/2;
  18.            c=desc[g]%2;
  19.            desc[g]=b;
  20.            bin[n]=c;
  21.            ++i;
  22.            ++n;
  23.        }
  24.        g++;
  25.        i=0;
  26.    }
  27. }