# Conversion Binary <-> Decimal

Hi
I need two simple functions:

1 - Convert Binary to Decimal and returns this value
2-  Convert Decimal to Binary and returns this value

Thanks
###### Who is Participating?

Commented:
come to think of it, you can shift the bits out instead of the sprintf thing...
0

Commented:
dec to bin:
what I do is make a hex lookup table

0 = "0000"
1 = "0001"
...
f = "1111"

and do an sprintf into a hex string.
int i, char * str...
sprintf(str, "%x", i);

then each hex digit is replaced with the
lookup value. Kill leading zeros if you want too...

bin to dec is easier
place the bits into an unsigned int  using shift operator
<< ...

0

Commented:
// Binary to Decimal
http://www.c-for-dummies.com/lessons/bonus/13/

// Decimal to Binary
http://mathforum.com/dr.math/problems/kaufman.10.26.99.html

I will try to make an example.
0

Commented:
// Cheap example.  Microsoft compiler
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

long     BinaryToDecimal(const char * pstrBinary)
{
int     intLoop=0;
long     lngReturn=0L;
long     lngMultip=1L;
for (intLoop=0; intLoop < (int)strlen(pstrBinary); intLoop++)
{
if ('1' == pstrBinary[intLoop])
{
lngReturn += lngMultip;
}
lngMultip *= 2;
}
return     lngReturn;
}

char     *     DecimalToBinary(long lngDecimal)
{
static     char strReturn[128]={0};
_ltoa(lngDecimal, strReturn, 2);
return strReturn;
}

int main(void)
{
long          lngDecimal     =     7;
char     *     pstrBinary     =     "111";

printf("B2D=%ld\nD2B=%s\n",     BinaryToDecimal(pstrBinary),     DecimalToBinary(lngDecimal));
}
0

Author Commented:
Hi jonnin,
As you sugested I wrote this program but I have a segmentation fault, and I can not understand where the problem is.

Can you give more details about
"bin to dec is easier
place the bits into an unsigned int  using shift operator
<< ..."

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

void int2bin(long num);

int main()
{
int2bin(12343);
}

void int2bin(long num)
{
char *hex;
char bin[50]="";
sprintf(hex, "%X", num);
while (*hex) {
switch (*hex)
{
case '0':
strcat(bin, "0000");
break;
case '1':
strcat(bin, "0001");
break;
case '2':
strcat(bin, "0010");
break;
case '3':
strcat(bin, "0011");
break;
case '4':
strcat(bin, "0100");
break;
case '5':
strcat(bin, "0101");
break;
case '6':
strcat(bin, "0110");
break;
case '7':
strcat(bin, "0111");
break;
case '8':
strcat(bin, "1000");
break;
case '9':
strcat(bin, "1001");
break;
case 'A':
strcat(bin, "1010");
break;
case 'B':
strcat(bin, "1011");
break;
case 'C':
strcat(bin, "1100");
break;
case 'D':
strcat(bin, "1101");
break;
case 'E':
strcat(bin, "1110");
break;
case 'F':
strcat(bin, "1111");
break;
}

*hex++;
}

printf("%s\n", bin);

}
0

Commented:
Make these changes...

char * hex; ----> to
char * hex = (char *)(malloc(sizeof(long)*2*sizeof(char)));
Also, add this as a better programming practice.

*hex++;   -----> to
hex++; //Just hex++

At the end of the code:
0

progCommented:
char *int2bin(long lno,char *buf)
{
int c = 32;

buf[32]=0;
do
{

buf[--c] = '0' + (lno & 1);
lno = lno >> 1;
}
while (c);

return buf;

}

long bin2int(char *buf)
{
long val=0;
int c=0;

while (buf[c])
{
val = (val << 1) | (buf[c++]-'0');
}

return val;

}

'example

printf("\n%s",int2bin(1024,test));
printf("\n%li",bin2int(test));

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.