Byte-to-binary conversion function My implementation of a binary-to-bits converting function:

#include &lt;stdio.h&gt;
#include &lt;limits.h&gt;

unsigned char *return_byte (unsigned char source)
{
    static unsigned char byte[CHAR_BIT];
    unsigned char *p = byte, i;

    for(i = 0; i &lt; CHAR_BIT; i++)
        p[i] = '0' + ((source &amp; (1 &lt;&lt; i)) &gt; 0);

    return p;
}



int main(void)
{
    unsigned char val = 200;

    printf("Value:\t%i\nBinary:\t%s", val, return_byte(val));

    return 0;
}


Output:




Value:  200
Binary: 00010011
return_byte doesn't tell much what the function is intended to do. btoa would be more in line with C naming convention (akin to itoa)
A p variable is pretty much useless. Consider

static unsigned char byte[CHAR_BIT];
unsigned char i;

for(i = 0; i &lt; CHAR_BIT; i++)
    byte[i] = '0' + ((source &amp; (1 &lt;&lt; i)) &gt; 0);

return byte;

Using an unsigned char for indexing is questionable. In any case it doesn't buy you much against a native int.
A boolean expression as + operand may raise some eyebrows (true is guaranteed to be a non-zero in an arithmetic context, but it is not guaranteed to be 1). I recommend to force an arithmetic value by right-shifting source instead of left-shifting the mask:

for(i = 0; i &lt; CHAR_BIT; i++) {
    byte[i] = '0' + (source &amp; 1);
    source &gt;&gt;= 1;
}

You do not null-terminate the resulting string. The fact that your test succeeded is a sheer (un)luck.
You probably know that returning static makes the code non-reentrant and thread-unsafe. You may want to let client provide a space for a resulting string.