Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int bin2dec(const char *);
char* dec2bin(const char *);
int main(void)
{
char dec[33];
char bin[33];
printf("Type a binary number: ");
fgets(bin, sizeof(bin), stdin);
printf("%s is %d in decimal\n", bin, bin2dec(bin));
printf("\nType a decimal number: ");
fgets(dec, sizeof(dec), stdin);
printf("\n%s is %s in binary\n", dec, dec2bin(dec));
return 0;
}
int bin2dec(const char *binario)
{
int i = 0;
char *ptr;
int dec = 0;
if((ptr = strchr(binario, '\n')) != NULL)
*ptr = '\0';
while(binario[i] == '0' || binario[i] == '1' && i <= 32)
{
if(binario[i] == '0')
dec <<= 1;
else
{
dec ^= 1;
dec <<= 1;
}
++i;
}
dec >>= 1;
return dec;
}
char* dec2bin(const char *decimal)
{
int i;
int dec;
int length;
char *ptr;
char bin[33];
if((ptr = strchr(decimal, '\n')) != NULL)
*ptr = '\0';
dec = atoi(decimal);
i = 0;
while(dec)
{
if((dec & 1) == 1)
bin[i] = '1';
else
bin[i] = '0';
dec >>= 1;
++i;
}
bin[i] = '\0';
length = strlen(bin) - 1;
/* reverse array in place */
for(i = 0; i < length; i++, length--)
{
/* I use dec as a temporary varible so
that I don't have to declare another one */
dec = bin[i];
bin[i] = bin[length];
bin[length] = dec;
}
return bin;
}
Here's what happens when I run it:
Code:
Type a binary number: 1010
1010 is 10 in decimal
Type a decimal number: 10
10 is hÉ@ in binary
Can someone help me find what is wrong? Thank you.