我有一个短变量(16位)和一个索引(unsigned char)。
我需要一个在我的变量index
中返回data
的宏。
这就是我得到的:
#define GETBIT(data, index) data & 1 << index
以及我如何使用它:
unsigned char i;
short * twobytes = (short *) calloc(1, sizeof(short));
twobytes = ((char * )buffer + *currentIndex);
while (codeLength != 0)
{
i = GETBIT(code, codeLength--);
*twobytes = SETBIT(*twobytes, *currentBitIndex, i);
(*currentBitIndex)++;
if (*currentBitIndex == 8) {
(*currentIndex)++;
(*currentBitIndex) %= 8;
}
}
由于某些原因,i
在我的测试用例中总是等于0
,有时候应该等于1
。
我做错了什么,应该如何解决?
感谢。
答案 0 :(得分:0)
没关系,谢谢,而不是codeLength--
我应该做--codeLength
。
答案 1 :(得分:0)
示例:
$ cat qq.c
#include <stdio.h>
#define GETBIT(data, index) ((data & (1 << index)) == 0 ? 0 : 1)
int main() {
const int x = 14;
int i;
for (i = 0; i < 32; i++) {
printf("%d ", GETBIT(x, i));
}
printf("\n");
return 0;
}
执行命令
$ gcc -Wall qq.c && ./a.out
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0