У меня есть «странная» проблема при записи / чтении двоичных значений:
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);
После каждой операции. Это правильно? Я что-то не так делаю?
использование читать().
get () извлекает до n-1 символов или \ n EOF или ошибки (в зависимости от 1-го числа) в строку стиля C
читать извлечения до n символов или EOF (в зависимости от того, 1-й) в любой области памяти.
Других решений пока нет …