Pasar de decimal a binario

Buenas,tengo que hacer un programa en C y parte del programa es que pase un valor decimal a binario.
Me sale bien pero me pone el resultado al reves.
Me explico:
En papel si queremos poner 10(decimal) en binario tenemos que ir diviendo por 2,y cuando llegamos al final escribimos el resto de abajo para arriba y quedario 01010 que es 10 en decimal,a mi me sale al reves,bueno sería los mismos...es un mal ejemplo.

Probad poniendo la letra "H" que en el codico ASSCI es 72,pues quiero pasar 72 a binario

Este es el programa que he escrito:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void){
char texto[50];
int longtexto;
int i;
int h[255];
int dividendo;
int cociente;
int divisor;
int resto;
int a;
a=0;

printf("Introducir el texto para ser cifrado:\n");
scanf("%s",texto);
longtexto=strlen(texto);
printf("El texto tiene una longitud de %d\n",longtexto);

divisor=2;
resto=0;
printf("El texto en código ASCII es\n");
for(i=0;i<longtexto;i++){

h[i]=texto[i];
printf("\n%d %c ",h[i],texto[i]);

dividendo=h[i];
while(a<8){ /*el "a" sirve como contador*/
cociente=dividendo/divisor;
resto=dividendo%2;
dividendo=cociente;
printf("%d\t",resto);
a++; /*Con esto voy rellenando los ceros hasta tener los 8 bits*/


}
}
system("pause");
return 0;
}

Un saludo,gracias
Guarda el resultado en una cadena e inviértelo.
amuchamu escribió:Guarda el resultado en una cadena e inviértelo.

En un caracter?es que no se ponerlo ,lo de invertirlo no lo se xk lo pregunte antes.me pase la noche haciendolo y ningun fruto
rubito escribió:
amuchamu escribió:Guarda el resultado en una cadena e inviértelo.

En un caracter?es que no se ponerlo ,lo de invertirlo no lo se xk lo pregunte antes.me pase la noche haciendolo y ningun fruto


El problema lo tienes es que conforme calculas los restos, los vas imprimiendo, lo único que puedes hacer es almacenar los valores o calcularlos en orden inverso. Si los almacenas en una cadena, tienes 2 opciones: rellenar la cadena desde el final al principio, o rellenarla en orden normal e invertirla después.

Pasar un entero de una cifra (cada resto) a un char es trivial, sólo tienes que sumarle '0'. Primero creas una cadena de tamaño 8(+1), y la rellenas de ceros ('0'). Después vas calculando los restos y los vas guardando desde el final de la cadena (cadena[7]). Con eso terminarás teniendo una cadena de '0' y '1', que podrás imprimir sin problemas con un printf y que representará el valor binario de un char.

Convendría que hicieras una función aparte para realizar la conversión, algo como void asciiToBinary(char c, char* res), te simplificaría un poco las cosas.
3 respuestas