如何从一个字节中轻松替换另一个x位的最后x位?

时间:2014-12-12 20:41:25

标签: c bit-manipulation

我正在尝试编写一个小型隐写术程序,但我正在努力学习基础知识(位操作)。

假设我有一个字符串变量

char s[];

一个3位字节数组

byte arr[3];

现在,作为一个例子,我想在这里做的是,逐个字节地执行所有操作,并执行以下操作:

  • 获取s的当前字节的前3位并使用替换arr的最后3位[0]
  • 获取s的当前字节的以下3位并使用它来替换arr的最后3位[1]
  • 获取s的当前字节的最后2位并使用替换arr的最后2位[2]

这样做最简单的方法是什么?

1 个答案:

答案 0 :(得分: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);
}