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)
我通常以另一种方式对我的位进行编号 - 因此位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)
当然,除非你以"正确的方式"对它们进行编号,而是将它们"倒退" - 然后反转我上面所做的.(不是说我想在这里开始宗教战争......)