2013-03-26 5 views
3
Byte a[2]={85, 15}; 
Byte b[2]={0}; 
CFBitVectorRef bv1 = CFBitVectorCreate(kCFAllocatorDefault, a, 16); 
CFRange r1 = {3, 8}; 
CFBitVectorGetBits(bv1, r1, b); 

바이트를 사용하여 [2] "0101 0101 0000 1111"이고, I 잘라낼 CFRange의 {3,8} (1,010 1,000) 다른 바이트 (B)에 [2] . 그러나 나는 b에서 아무것도 얻지 못했다. 그러나 범위를 {0,8} 또는 {8,8}로 변경하면 작동합니다. 왜 십자 바이트를 얻을 수 없습니까?CFRange 수없는 상호 바이트 CFBitVectorGetBits

+0

CoreFoundation의 버그처럼 보입니다. '{3, 5}'는 작동하지만'{3, 6} '은 작동하지 않습니다. –

+0

그래, {3,5}는 여전히 교차 바이트가 아니기 때문에 여전히 첫 번째 바이트에 있습니다. 하지만 {3, 6} 않습니다. – Witeman

+0

예, 방금 문제는 범위가 바이트 경계를 넘어서고 범위의 정렬이 아니라는 것이 문제라는 것입니다. Btw : 소스 코드가 http://opensource.apple.com/source/CF/CF-744.12/CFBitVector.c에 있으므로 오류를 찾을 수 있습니다 (- : bugreporter에서 버그를 제출하는 것이 좋습니다. apple.com. –

답변

0

나는 정확히 같은 문제가있는 것 같습니다. CFBitVectorGetBits는 {7,7} 범위를 사용할 때 내 * 바이트를 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 

작품.