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 に答える