在C中使用char类型进行位交换

Tim*_*Tim 1 c swap bit-manipulation char

数据类型为char,模式如下:

源字节:[0] [1] [2] [3] [4] [5] [6] [7]

目的地:[6] [7] [4] [5] [2] [3] [0] [1]

例如,如果我将char,29传递给此函数,它将执行交换并返回一个char类型值,即116.

我怎样才能进行交换?

谢谢.

========================

只是想知道我是否可以这样做?

unsigned char mask = 128;
char num = 0, value1 = 29;
int i, a;

for(i = 0; i < 8; i++) {
  if (i == 0 || i == 1 || i == 6 || i == 7)
    a = 6;
  else
    a = 2;

  if(i < 4)
    num = ((value1 & mask) >> a);
  else
    num = ((value1 & mask) << a);

  result = (result | num);

  if(i<7)
    mask = mask >> 1;
}
Run Code Online (Sandbox Code Playgroud)

bst*_*rre 5

我通常以另一种方式对我的位进行编号 - 因此位0是LSB.遵循您的编号方案:

unsigned char src = 29;
unsigned char dst = 0;
dst = (((src & 0x80) >> 6) | // bit 0
       ((src & 0x40) >> 6) | // bit 1
       ((src & 0x20) >> 2) | // bit 2
       ((src & 0x10) >> 2) | // bit 3
       ((src & 0x08) << 2) | // bit 4
       ((src & 0x04) << 2) | // bit 5
       ((src & 0x02) << 6) | // bit 6
       ((src & 0x01) << 6) // bit 7
      );
Run Code Online (Sandbox Code Playgroud)

当然,除非你以"正确的方式"对它们进行编号,而是将它们"倒退" - 然后反转我上面所做的.(不是说我想在这里开始宗教战争......)