2011-09-13 4 views
3

큰 비트 마스크를 사용하는 iOS 앱에서 알고리즘을 구현하려고합니다. 각 비트 마스크는 최대 256 비트 (32 바이트) 길이가 될 수 있습니다.큰 비트 마스크로 작업 할 때 편리한 방법

C 또는 Objective-C의 언어 기능이 내장되어있어 이런 일을 쉽게하거나 기대해야합니다. 임의의 문자 배열 내에서 비트를 조작하기위한 함수를 직접 작성 하시겠습니까? 나 자신을 그렇게하기는 너무 어려울 것 같지 않지만 이미 효율적이고 깨끗하게 사용할 수있는 것이 있다면 내 자신을 쓰지 않을 것입니다.

답변

3

이런 종류의 문제를 처리하도록 설계된 CFMutableBitVector을 살펴보십시오.

+0

감사의 말 Rob - 몇 가지 흥미로운 답변이 여기에 게시되었지만 이것이 정확히 내가 찾고자했던 것입니다! –

0

std :: bitset을 C++ STL에서 볼 수 있습니다.

0

글쎄, 32 바이트는 특별히 크지 않습니다.

8 개의 마스크 바이트 배열을 만들고 비트 #의 하위 3 비트를 사용하여 배열을 인덱싱하고 비트 #의 나머지 5 비트를 사용하여 바이트 배열을 주소 지정하여 비트를 가져 오거나 설정할 수 있습니다 비트.

표준 C 라이브러리에 바이트 문자열 연산이 있거나/xor 또는 바이트 문자열 연산이 있다는 것을 기억하지 않지만 쓰기가 어렵지는 않습니다 (예 : andbytes(target, source, count)을 수행하는 함수). 너의 작은 조각.

당신이해야 할 주요한 일은 비트 어레이의 저장 장치를 어떻게 제어 할 것인지를 결정하는 것입니다. 그것들이 256 비트로 고정되어 있다면 비트를 포함하는 char [8] 배열을 가진 Objective-C 객체가되는 것이 가장 합리적 일 것입니다.

0

LibTomMath 라이브러리는 임의의 크기의 정수에 대해 필요한 논리 연산이 있습니다.

Apple의 iOS Accelerate Framework은 아마도 256 비트 정수 (최대 1024 비트까지의 다른 크기)에 대한 논리 연산을 제공 할 것이지만 문서는 개략적입니다.

관련 문제