бинарное чтение / запись в fstream

У меня есть «странная» проблема при записи / чтении двоичных значений:

bool readHeader(std::fstream &file)
{
file.seekg(0);
int a = file.tellg();
file.get(reinterpret_cast<char*>(&a), sizeof(a));
int b = file.tellg();
file.get(reinterpret_cast<char*>(&b), sizeof(b));
int c = file.tellg();
file.seekg(32);
return !(file.bad());
}

bool writeHeader(std::fstream &file)
{
file.seekg(0);
int a = file.tellg();
file.write(reinterpret_cast<char*>(&a), sizeof(a));
int b = file.tellg();
file.write(reinterpret_cast<char*>(&b), sizeof(b));
int c = file.tellg();
file.seekg(32);
return !(file.bad());
}

Где «a» — это uint32_t, а «b» — это uint64_t.

Что здесь странного — переменные a, b и c имеют следующие значения:

в readHeader: 0, 3, 10

в записиHeader: 0, 4, 12

И это потому, что я должен был сделать:

file.seekg(1, std::ios_base::cur);

После каждой операции. Это правильно? Я что-то не так делаю?

0

Решение

использование читать().

get () извлекает до n-1 символов или \ n EOF или ошибки (в зависимости от 1-го числа) в строку стиля C

читать извлечения до n символов или EOF (в зависимости от того, 1-й) в любой области памяти.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector