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?
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.
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 ;)
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;
}
}