Чтение двоичного файла в битовый набор или вектор <bool> - PullRequest
4 голосов
/ 05 декабря 2011

Как мне прочитать двоичный файл в bitset или vector<bool>?Двоичный файл будет различаться по длине.Есть ли лучший контейнер для этого?Я новичок в C ++, хотя и опытный программист.

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Если файл большой, Зачем вам читать один раз, весь файл в память?

Вы можете прочитать маленький кусочек каждый раз.Размер определяется с помощью size в этой функции:

file.read(buff, size)

Когда buff является массивом char.

Извините,но Вы не можете просто прочитать / сохранить вектор в файл.подробнее см. здесь и здесь .

И используйте Google, это очень полезно ...

0 голосов
/ 05 декабря 2011

Вы не дали слишком много контекста того, что вы пытаетесь сделать в своем вопросе. Но вот один быстрый и грязный способ сделать это:

#include <iterator>
#include <fstream>
#include <vector>
#include <assert.h>
using namespace std;

const char *filename = "foo.bar";
int main()
{
  vector<bool> v;
  ifstream binary_file(filename, ios::binary);

  assert(binary_file);
  copy(istream_iterator<unsigned char>(binary_file),
       istream_iterator<unsigned char>(),
       back_insert_iterator< vector<bool> >(v));
}

Чтение нулевого байта символа \ 0 в векторе будет ложным. Все остальные считанные байты будут считаться истиной.

...