バイナリ ファイルにビット単位で書き込む必要があるバイナリ データの vector< bool> があります (バイトが 8 の倍数である必要があることはわかっていますが、そうであると仮定してください)。次に、そのデータを vector< bool> に再読み込みする必要があります。これを機能させるのに非常に苦労しています。
データは vector< bool> で開始および終了する必要があります。これを達成するための簡単な構文についてアドバイスできる人がいれば、それは大きな助けになります。
最も簡単な方法は、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