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

on
Medium Priority
2,883 Views
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

## View Solutions Only

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

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.

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.

CERTIFIED EXPERT
Top Expert 2006
Commented:
General function to convert  would look like this

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

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
Commented:
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);
}

Commented:
I apologize.
##### Thanks for using Experts Exchange.

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