Я пытаюсь декодировать двоичный код, который был закодирован (самый старший байт первым) со следующим циклом.Декодировать биты в C
int ch; // Has a value of, for example, 97 (which evaluates to 'a' with putchar(ch))
for (int i = 0; i < CHAR_BIT; i++) {
printf("%d", !!((ch << i) & 0x80));
}
До сих пор я пытался:
unsigned int byte[CHAR_BIT]; // Filled elsewhere
unsigned char result = 0;
for (int i = 0; i < CHAR_BIT; i++) {
result |= (byte[i] == '1') << ((CHAR_BIT - 1) - i);
}
putchar(result);
Но выход не так, что кажется, будто персонажи были сдвинуты неправильное количество. Предполагая, что первый блок кода находится в файле prog1, а второй - в prog2, вывод этой команды оболочки должен быть abc
, но это `bb (буквальный обратный тик, за которым следует bb).
echo "abc" | ./prog1 | ./prog2
Когда вы говорите, что «выход неправильный», вы можете указать, какой вход/выход и что вы ожидаете –
@BenWainwright Посмотреть мое обновление – Tim
Вы пишете код, который кодирует символ, или это было вам дано? –