You can do something like this.
#define LENGTH 8 // Use constants instead of numbers
int numbers[LENGTH];
numbers[0] = 1; numbers[1] = 0;
numbers[2] = 1;
numbers[3] = 1;
numbers[4] = 0;
numbers[5] = 0;
numbers[6] = 1;
numbers[7] = 1;
unsigned char result = 0;
int i = 0;
int temp = 0;
for (i=0; i<LENGTH; i++)
{
if (numbers[i] == 1)
{
temp = numbers[i] << i;
result |= (unsigned char)temp;
}
}
printf("Result: %02X\r\n", result);
Explanation:
The shift operator will move the value of
numbers[i]
i
steps to the left
Then the shifted value is added to the
result
A shift is only necessary if the value of
numbers[i]
is 1.
i = 0 -> temp = 00000001 -> result = 00000001
i = 2 -> temp = 00000100 -> result = 00000101
i = 3 -> temp = 00001000 -> result = 00001101
i = 6 -> temp = 01000000 -> result = 01001101
i = 7 -> temp = 10000000 -> result = 11001101