Int to Binary Conversion

I'm looking for a good int to binary conversion using C.
I've searched on here for some of the examples, however didn't find any I really liked..

I'd like to convert an int into a char *.
cfansAsked:
Who is Participating?
 
rajeev_devinCommented:
A very smaller recursive version

void binary(int number) {
   int remainder;
   if(number <= 1) {
      printf ("%d", number);
      return;
   }
   remainder = number%2;
   binary(number >> 1);    
   printf ("%d", remainder);
}
0
 
cfansAuthor Commented:
Is there also a way to just use printf to display an int as a binary number?
0
 
sunnycoderCommented:
This is a very common homework question. May we know why you need this routine?

Also ...
>I've searched on here for some of the examples, however didn't find any I really liked..
What is that you are exactly looking for? Why was the existing code not good enough?

Cheers!
sunnycoder
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
cfansAuthor Commented:
Well actually it isn't that I didn't like it.. I tried using some of the examples.. and they just gave me seg faults.. can't really figure out why either.
0
 
x4uCommented:
An int actually is a binary number already.

You can print it in hexadecimal with:
printf( "%x", intval );
or formatted in C-style and with all 4 bytes present:
printf( "0x%.8x", intval );

to print it to a string use:
char str[ 20 ];
sprintf( str, "0x%.8x", intval );

to get a char* of the 4 bytes of an int you can simply cast the pointer to it
char * barr =  (char *) &intval;
and access the bytes this way:
char firstByte = barr[ 0 ];
but the ordering of the bytes is processor dependant if you do it this way (little/big endian)

to do this processor independant you can use:
char barr[ 4 ];
barr[ 0 ] = (char) ( intval >> 24 );
barr[ 1 ] = (char) ( intval >> 16 );
barr[ 2 ] = (char) ( intval >>  8 );
barr[ 3 ] = (char) intval;

I'm not sure if this is what you meant.
0
 
leisnerCommented:
char *convert(int a)
{
     enum { NUM_CHARS = 33 };       /* for 32 bit ints */
     char bitarray[NUM_CHARS];
     char *p;
     unsigned value;
     value = (unsigned) a;

     p = &bitarray[NUM_CHARS - 1];
    *p ='\0';
    while(value) {
         p--;
         *p = (value & 1) ? '1' : '0';
         value >>= 1;
   }
   return strdup(p);
}

What algorithms did you not like?

0
 
sunnycoderCommented:
General function to convert  would look like this

a = number
b = base (in this case, 2)

1. Start with an empty string.
2. If a is negative, add '-' to the string and negate a.
3. Add the digit (a modulus b) to the string.
4. a = a / b.
5. If a > 0 then goto 3.
6. Reverse the string.

Specifically for binary, you can simplify it significantly ...

for (all bits - note that this will be sizeof int * bits per byte)
       AND the value with 0x01 and store 1 in string if result was true else false
       right shift value by 1
reverse the string and return

To avoid reversing you can start generating the string from the other end ... AND with 1<<number of bits-1 and left shift by 1 instead of right shift.

Cheers!
sunnycoder
0
 
rajeev_devinCommented:
I apologize.
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.

All Courses

From novice to tech pro — start learning today.