We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Int to Binary Conversion

cfans
cfans asked
on
Medium Priority
2,883 Views
Last Modified: 2013-11-15
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 *.
Comment
Watch Question

Author

Commented:
Is there also a way to just use printf to display an int as a binary number?
CERTIFIED EXPERT
Top Expert 2006

Commented:
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

Author

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.
x4u

Commented:
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.
Commented:
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?

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
CERTIFIED EXPERT
Top Expert 2006
Commented:
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
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);
}
I apologize.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.