Запись двоичных данных в файл - PullRequest
0 голосов
/ 01 октября 2011

Я хочу временно кэшировать двоичные данные, прежде чем я смогу записать их в файл.Это была моя идея.

Поскольку мне нужно вставить заголовок перед этими данными, который указывает, какой объем данных будет следовать после заголовка, мне нужен был способ сохранить эти данные в кэше, прежде чем они будут записаны в ofstream file.Я решил создать ostream buffer();, в котором я мог бы вывести все эти данные, не записывая их в файл.

После того, как заголовок был написан, я просто сделал бы file << buffer, чтобы вывести данные.

Я все еще борюсь с ошибками компилятора, такими как эта:

error: no matching function for call to ‘TGA2Converter::writePixel(std::ostream (&)(), uint32_t&)’
note: candidate is: void TGA2Converter::writePixel(std::ostream&, uint32_t)

Почему я получаю это сообщение?И, что еще важнее, я подхожу к проблеме наиболее эффективным и удобным способом?


Редактировать: люди спрашивают код.Я пытался сузить это до этого ...

// This is a file. I do not want to write the binary
// data to the file before I can write the header.
ofstream file("test.txt", ios::binary);

// This is binary data. Each entry represents a byte.
// I want to write it to a temporary cache. In my
// real code, this data has to be gathered before
// I can write the header because its contents depend
// on the nature of the data.
stringstream cache;
vector<uint32_t> arbitraryBinData;
arbitraryBinData.resize(3);
arbitraryBinData[0] = 0x00;
arbitraryBinData[1] = 0xef;
arbitraryBinData[2] = 0x08;

// Write it to temporary cache
for (unsigned i = 0; i < arbitraryBinData.size(); ++i)
    cache << arbitraryBinData[i];

// Write header
uint32_t header = 0x80;     // Calculation based on the data!
file << header;

// Write data from cache
file << cache;

Я полностью ожидал, что эти двоичные данные будут записаны в файл:

0000000: 8000 ef08

Но я получил это:

0000000: 3132 3830 7837 6666 6638 6434 3764 3139
0000010: 38

Почему я не получаю ожидаемый результат?

1 Ответ

3 голосов
/ 01 октября 2011

ostream buffer(); объявляет функцию с именем buffer без аргументов и возвращает ostream.Также ostream является базовым классом, вместо него следует использовать strstream.

...