// macros for the actual printing
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
#define BYTE_TO_BINARY(byte) \
(byte & 0x80 ? '1' : '0'), \
(byte & 0x40 ? '1' : '0'), \
(byte & 0x20 ? '1' : '0'), \
(byte & 0x10 ? '1' : '0'), \
(byte & 0x08 ? '1' : '0'), \
(byte & 0x04 ? '1' : '0'), \
(byte & 0x02 ? '1' : '0'), \
(byte & 0x01 ? '1' : '0')
// input
int b = 1234123;
binary_print(b, sizeof(b));
// relevant source
void binary_print(int data, size_t data_len)
{
size_t i;
unsigned int byte_shift = data_len * 8;
/*
while (1) {
printf(BYTE_TO_BINARY_PATTERN" ", BYTE_TO_BINARY(*data>>byte_shift));
byte_shift = byte_shift-8;
if (byte_shift == 0)
break;
}
*/
for (i = 0; i < data_len; i++) {
printf(BYTE_TO_BINARY_PATTERN" ", BYTE_TO_BINARY(data>>byte_shift));
byte_shift = byte_shift-8;
}
printf("\n");
}
// output
>>> ./a.out
11001011 00000000 00010010 11010100
Comments