4
Byte a[2]={85, 15};
Byte b[2]={0};
CFBitVectorRef bv1 = CFBitVectorCreate(kCFAllocatorDefault, a, 16);
CFRange r1 = {3, 8};
CFBitVectorGetBits(bv1, r1, b);

字节a[2]是“0101 0101 0000 1111”,我想把CFRange的{3,8}(1010 1000)剪成另一个字节b[2]。但我在 b[2] 中一无所获。但是,如果我将范围更改为 {0,8} 或 {8,8},它会起作用。为什么不能跨字节获取位?

4

1 回答 1

0

好像我有完全相同的问题。当我使用 {7,7} 范围时,CFBitVectorGetBits 将我的 *bytes 设置为 nil。找到任何解决方案了吗?我现在通过愚蠢地迭代比特来实现它。
编辑:
添加代码:

CFBitVectorRef source = ... ;// Some source bit vector
CFIndex location = 7;//Current location in bit vector
uint8 *bytes = malloc(sizeof(uint8));
//CFBitVectorGetBits(source, CFRangeMake(location,7), bytes);//This one is bugged
CFBitVectorRef buffer = CFBitVectorCreateMutable(NULL,7);
CFBitVectorSetCount(buffer, 7);
for (CFIndex i=0; i<7; i++)
CFBitVectorSetBitAtIndex(buffer, i, CFBitVectorGetBitAtIndex(source, location+i));
CFBitVectorGetBits(buffer, CFRangeMake(0, 7), bytes);
//Now *bytes contains needed bits

根据需要工作。

于 2013-10-03T11:58:14.293 回答