2011-09-13 32 views
3

我想在一個iOS應用程序中實現一個算法,它將利用大的位掩碼。每個位掩碼的長度可以高達256位(32字節)。我需要在掩碼內的任意位置快速獲取/設置位等。便捷的方式來處理大位掩碼

C或Objective-C的任何內置語言特性是否使得這種事情容易做到,或者我應該期望編寫我自己的函數來處理任意字符數組中的位?看起來自己做起來似乎不太困難,但如果有些東西可以有效且乾淨地做到這一點,我寧願不寫我自己的。

回答

3

看看CFMutableBitVector,它是專爲處理這類問題而設計的。

+0

感謝羅布 - 這裏發佈了幾個有趣的答案,但這正是我希望找到的! –

0

你可以看看C++ STL中的std :: bitset。

0

那麼,32字節不是特別大。

您可以通過創建一個8位掩碼字節的數組來獲取/設置位,用位#的低3位索引數組,並使用位#的剩餘5位來尋址保存位。

我不記得在標準C庫中有和/或/ xor字節字符串操作,但它不是很難寫,例如一個函數做andbytes(target, source, count),以便在你的位。

您需要做的主要事情是弄清楚如何控制位陣列的存儲。如果它們固定在256位,那麼使用char [8]數組包含這些位使它們成爲Objective-C對象是最有意義的。

0

LibTomMath庫對任意大小的整數都有必要的邏輯操作。

Apple的iOS Accelerate Framework可能提供256位整數(以及其他大小高達1024位)的邏輯運算,但文檔很粗略。