0

목표 C에서 임의의 정밀도 숫자의 표현에 대해 비트 연산을 수행해야합니다. 지금까지 NSData 객체를 사용하여 숫자를 저장했습니다. 그? 그렇지 않다면이를 달성하는 다른 방법이 있습니까?임의 정밀도 비트 조작 (목표 C)

답변

1

NSMutableData을 사용하면 char에서 바이트를 가져 와서 비트를 이동하고 -replaceBytesInRange:withBytes:으로 바꿀 수 있습니다.

원시 데이터를 보유하기 위해 char * 버퍼를 사용하여 자신 만의 날짜 홀더 클래스를 쓰는 것을 제외하고는 다른 솔루션이 보이지 않습니다.

1

Apple은 임의로 정밀도를 지원하지 않습니다. vecLib의 1024 비트 정수보다 큰 값은 제공되지 않습니다.

나는 또한 NSData이 교대와 롤을 제공한다고 생각하지 않는다. 그래서 당신은 당신 자신의 것을 굴려야 할 것입니다. 예 : 내가 직접 여기를 입력하고있어 일부 작은 오차가있을 수 있습니다 매우 순진 버전 : 당신이로 이동하고자하는 비트의 수를 가정 물론

@interface NSData (Shifts) 

- (NSData *)dataByShiftingLeft:(NSUInteger)bitCount 
{ 
    // we'll work byte by byte 
    int wholeBytes = bitCount >> 3; 
    int extraBits = bitCount&7; 

    NSMutableData *newData = [NSMutableData dataWithLength:self.length + wholeBytes + (extraBits ? 1 : 0)]; 

    if(extraBits) 
    { 
     uint8_t *sourceBytes = [self bytes]; 
     uint8_t *destinationBytes = [newData mutableBytes]; 

     for(int index = 0; index < self.length-1; index++) 
     { 
      destinationBytes[index] = 
        (sourceBytes[index] >> (8-extraBits)) | 
        (sourceBytes[index+1] << extraBits); 
     } 
     destinationBytes[index] = roll >> (8-extraBits); 
    } 
    else 
     /* just copy all of self into the beginning of newData */ 

    return newData; 
} 

@end 

는, 다른 사이, 그 자체 NSUInteger로 표현할 수있다 죄.