数据类型为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;
}
最佳答案
我通常用另一种方式对位进行编号——因此位 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
);
当然,除非您“以正确的方式”对它们进行编号,但“向后”绘制它们——然后只需颠倒我上面所做的即可。 (并不是说我想在这里开始一场宗教 war ......)
关于c - 在 C 中与 char 类型进行位交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917613/