2016-05-18 5 views
4

私はいくつかのデータを扱うが、それは、ビットのシーケンスのようなシーケンスで動作することができる方法を教えて8サイズ%8!= 0などのビットの配列を格納するにはどうすればよいですか?

で割り切れないその
数(378)で表されますか?
私はそれを保存し、処理し、あるシーケンスをもう一方のシーケンスに追加する必要があります。

  1. ラウンド最寄り数%まで8 == 0、及びその大きさの文字の配列を使用する:

    オプションは、私は考えました。

  2. bitfieldを使用します。私が知っている限り、bitfieldのメモリ配列は実装定義です。

アップデート:私が働いているビット列の
プロパティ:それはリードソロモン符号化アルゴリズムを使用して、指定された単語から生成されたコードワードである

ビット単位で独立した値を扱うことは私にとって本当の意味ではありません。私は、バーストエラーの影響を減らすために、codeWordsを保存して新しいコードワードを既存のコードワードに追加する方法を主な関心事にしています。

+0

一般的に追加されますか?処理中にどのようなクエリを実行するのですか? – harold

+0

オプション1は良いと思います。あなたは記憶を浪費することを心配していますか?無駄なパディングビットは、使用されるスペースの約1.5%にすぎません。 – samgak

答えて

-1

C++でビットシーケンスを表す方法はいくつかあります。固定サイズのシーケンスのために意図

一つは、std::bitsetです:

// Create array 
std::bitset<378> bitArray; 
// Access a bit 
bitArray[14] = 1; 
// Check whether a bit is set 
if (bitArray.test(14)) 

あなたが動的にサイズ変更可能な配列が必要な場合は、std::vectorを検討すべきです。記憶容量の大きさが重要で、アクセス時間のオーバーヘッドが問題にならない場合は、boolを厳密にパックされたアレイに格納するという標準によって保証されているstd::vector<bool>を検討してください。あなたがしっかりと梱包を気にしない場合は

、また、あなた自身のBit列挙を定義する(あるいは単に使用char)できます

enum Bit : unsigned char 
{ 
    Zero = 0, One = 1 
} 
std::vector<Bit> bitArray; 
+0

ビットセットを別のビットセットに追加する方法の概要を教えてください。 – user2079303

+0

@ user2079303 'std :: bitset'は固定サイズです:ビットの配列です。このような機能を自分でコーディングする必要があります。 – Angew

+1

@ user2079303 ["boost :: dynamic_bitsetまたはstd :: bitsetを連結する]"(http://stackoverflow.com/questions/3061721/concatenate-boostdynamic-bitset-or-stdbitset) – HostileFork

0

別のオプションがある、のstd ::ベクトルを使用します。 bool型のstd :: vectorは、⌈v.size()/8⌉バイトのみを使用するようにboolに特化しています。しかし、私はあなたがこれを使うべきだと言っているわけではありません。この特殊化の理由は、v.begin()が未処理のポインタだけでなく、いくつかの型依存のイテレータである理由です。それ以外の場合、ベクトルのv.begin()は常に要素へのポインタです。

ビット配列の長さが非常に長いが、設定するビット数が非常に少ないと予想される場合は、代わりにstd::set<int>を使用するように簡略化して、真と思われるビットのインデックスを格納する必要があります。

関連する問題