2

バイナリ ファイルにビット単位で書き込む必要があるバイナリ データの vector< bool> があります (バイトが 8 の倍数である必要があることはわかっていますが、そうであると仮定してください)。次に、そのデータを vector< bool> に再読み込みする必要があります。これを機能させるのに非常に苦労しています。

データは vector< bool> で開始および終了する必要があります。これを達成するための簡単な構文についてアドバイスできる人がいれば、それは大きな助けになります。

4

1 に答える 1

1

最も簡単な方法は、std::bitsetを使用することです。これには、変換を行うために使用できるコンストラクターと to_ulong メンバーがあります。次に、サイズ 8 のベクトルをビットセットに、またはその逆に変換するだけです。ビットがベクトルに格納される順序と、ファイルに適用される場合のエンディアンに注意してください...

私は良い一日を過ごしています。ここにいくつかの「疑似」コードがあります:

// you will guess declarations
// you might have to reverse bit order dependaing of how you store bits

for(int i = 0; i < 8; ++i)
{
    if(myvector[i]) mybistset.set(i);
}

char toWriteInFile = bitset.to_ulong();

// write in file

[...]

char readFromFile;

// read from file

std::bitset mybitset(readFromFile);

// same remarks

for(int i = 0; i < 8; ++i)
{
    myvector[i] = mybistset[i];
}

もちろん、ベクトルのサイズが 8 よりも大きくなるように管理する必要があります ;)

my2c

于 2011-02-02T14:43:32.367 に答える