Вы вставляете биты в порядке, обратном тому, который указан в источнике.Второй бит будет сдвинут на 1, а не на 6 и так далее.Таким образом, результирующее число равно
1 1 0 0 1 1 1 0
, что равно 0xce, десятичному 206 и, следовательно, не ASCII.
Кроме того, использование XOR для этого очень странно, оно должно быть просто побитовым ИЛИ (|
).
Вот фиксированная попытка:
char s = 0;
const unsigned char bits[] = { 0, 1, 1, 1, 0, 0, 1, 1 };
for (int i = 0; i < 8; ++i) {
s |= bits[i] << (7 - i);
}
printf("%c\n", s);
Это печатает s
.