Чтение двоичных данных в структуру с помощью ifstream
20031 просмотра
2 ответа
Я пытаюсь прочитать двоичные данные из файла, используя ifstream.
В частности, я пытаюсь заполнить эту структуру "Заголовок" данными, считанными из файла:
struct Header {
char id[16];
int length;
int count;
};
Теперь, если я прочитаю файл таким образом, результат будет именно тем, что я хочу:
input.read((char*)&hdr, sizeof(hdr));
Но если я вместо этого читаю каждую переменную структуры вручную, результаты будут бессмысленными:
input.read((char*)&hdr.id, sizeof(hdr.id)); input.read((char*)&hdr.length, sizeof(hdr.length)); input.read((char*)&hdr.count, sizeof(hdr.count));
У меня вопрос: что здесь происходит, что заставляет эти два метода возвращать разные результаты?
Автор: Dan Источник Размещён: 13.11.2019 11:52Ответы (2)
2 плюса
Как говорится в приведенном выше комментарии, вам, вероятно, не хватает hdr.length и hdr.count. Я попробовал это с gcc 4.8 и clang 3.5, и он работает правильно.
#include <iostream>
#include <fstream>
#pragma pack(push, r1, 1)
struct Header {
char id[15];
int length;
int count;
};
#pragma pack(pop, r1)
int main() {
Header h = {"alalalala", 5, 10};
std::fstream fh;
fh.open("test.txt", std::fstream::out | std::fstream::binary);
fh.write((char*)&h, sizeof(Header));
fh.close();
fh.open("test.txt", std::fstream::in | std::fstream::binary);
fh.read((char*)&h.id, sizeof(h.id));
fh.read((char*)&h.length, sizeof(h.length));
fh.read((char*)&h.count, sizeof(h.count));
fh.close();
std::cout << h.id << " " << h.length << " " << h.count << std::endl;
}
Автор: Blaz Bratanic
Размещён: 05.03.2014 08:48
1 плюс
Также возможно прочитать структуру за один шаг.
т.е. fh.read((char*)&h, sizeof(Header));
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- c++ В C ++ конструктор и деструктор могут быть встроенными функциями?
- struct В чем разница между структурой и классом в .NET?
- struct Когда вы должны использовать класс против структуры в C ++?
- struct Каковы различия между структурой и классом в C ++?
- struct Why isn't sizeof for a struct equal to the sum of sizeof of each member?
- struct Почему мы не можем инициализировать элементы внутри структуры?
- binary Как посчитать количество установленных бит в 32-битном целом числе?
- binary как читать двоичные файлы NASA .hgt
- binary Конвертировать из BitArray в Byte
- binary Оптимизировать алгоритм двоичного поиска
- binary Показать двоичное представление числа в C?
- ifstream Возврат ifstream в функции
- ifstream Читать текстовый файл в массив символов. C ++ ifstream
- ifstream istream :: getline тип возвращаемого значения
- ifstream Заменить строку в текстовом файле
- ifstream ifstream :: read не сообщает, сколько байтов он действительно читает?