Int to Binary Conversion

Posted on 2006-03-30
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 *.
Question by:cfans

    Author Comment

    Is there also a way to just use printf to display an int as a binary number?
    LVL 45

    Expert Comment

    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?


    Author Comment

    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.
    LVL 11

    Expert Comment

    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.
    LVL 3

    Assisted Solution

    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 = (value & 1) ? '1' : '0';
             value >>= 1;
       return strdup(p);

    What algorithms did you not like?

    LVL 45

    Assisted Solution

    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.

    LVL 12

    Accepted Solution

    A very smaller recursive version

    void binary(int number) {
       int remainder;
       if(number <= 1) {
          printf ("%d", number);
       remainder = number%2;
       binary(number >> 1);    
       printf ("%d", remainder);
    LVL 12

    Expert Comment

    I apologize.

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    6 Surprising Benefits of Threat Intelligence

    All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

    Suggested Solutions

    I previously wrote an article addressing the use of UBCD4WIN and SARDU. All are great, but I have always been an advocate of SARDU. Recently it was suggested that I go back and take a look at Easy2Boot in comparison.
    In our personal lives, we have well-designed consumer apps to delight us and make even the most complex transactions simple. Many enterprise applications, however, are a bit behind the times. For an enterprise app to be successful in today's tech wo…
    The viewer will learn how to successfully download and install the SARDU utility on Windows 8, without downloading adware.
    XMind Plus helps organize all details/aspects of any project from large to small in an orderly and concise manner. If you are working on a complex project, use this micro tutorial to show you how to make a basic flow chart. The software is free when…

    737 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    22 Experts available now in Live!

    Get 1:1 Help Now