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},它会起作用。为什么不能跨字节获取位?

最佳答案

好像我有完全相同的问题。当我使用 {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

根据需要工作。

关于objective-c - 使用 CFBitVectorGetBits 时 CFRange 不能跨字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15628026/

10-10 20:49