Как легко заменить последние биты x из байта на x бит из другого?

Я пытаюсь написать небольшую программу стеганографии, но я борюсь с основами (бит-манипуляция).

Допустим, у меня есть строковая переменная

char s[];

И 3-позиционный байтовый массив

byte arr[3];

Теперь, в качестве примера, то, что я хотел бы сделать здесь, - пройти через все байты по байтам и сделать следующее:

  • Получите первые 3 бита текущего байта s и используйте замену последних 3 бит arr [0]
  • Получите следующие 3 бита текущего байта s и используйте для замены последних 3 бит arr [1]
  • Получите последние 2 бита текущего байта s и замените последние 2 бита arr [2]

Каков самый простой способ сделать это?

1 ответ

for (i = 0; i < ...; ++i) {
 const byte b = s[i];
 arr[0] = (arr[0] & ~7) | ((b >> 5) & 7);
 arr[1] = (arr[1] & ~7) | ((b >> 2) & 7);
 arr[2] = (arr[2] & ~3) | b & 3);
}

licensed under cc by-sa 3.0 with attribution.