Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
21 / 20 / 3
Регистрация: 08.12.2012
Сообщений: 92
1

Неправильно считывается структура из файла

16.11.2019, 16:54. Показов 1126. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, подскажите, что я делаю не так?

Есть структура, находящаяся в начале файла:
C++
1
2
3
4
5
6
7
struct BmpHead
{
    uint16_t bftype;
    uint32_t bfsize;
    uint32_t rez1;
    uint32_t bfoffbits;
        ...
Пытаюсь считать её таким способом и получаю кашу в полях кроме первого:
C++
1
2
3
4
5
    BmpHead* bufferBmpHead = new BmpHead;
 
    ifstream bmpFile;
    bmpFile.open(fileName, ios::in | ios::binary);
    bmpFile.read((char*)bufferBmpHead, sizeof(BmpHead));
При этом, если читать каждое поле по очереди, то всё нормально:
C++
1
2
3
4
5
6
7
    BmpHead* bufferBmpHead = new BmpHead;
 
    ifstream bmpFile;
    bmpFile.open(fileName, ios::in | ios::binary);
    bmpFile.read((char*)&bufferBmpHead->bftype, sizeof(uint16_t));
    bmpFile.read((char*)&bufferBmpHead->bfsize, sizeof(uint32_t));
    bmpFile.read((char*)&bufferBmpHead->rez1, sizeof(uint32_t));
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2019, 16:54
Ответы с готовыми решениями:

Неправильно считывается структура из файла
Записываю структуру А в файл, затем считываю в структуру В. Символы считываются нормально, а вот...

Неправильно считывается массив из файла
Не пойму в чем ошибка. #include "stdafx.h" #include <string> #include <fstream> #include...

Неправильно считывается массив
Здравствуйте. Есть класс матриц, один из конструкторов позволяет создать матрицу, используя...

Неправильно считывается массив из подструктуры
https://www.cyberforum.ru/attachments/403093d1400950588Подскажите пожалуйста в чем ошибка...

3
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
16.11.2019, 16:58 2
Лучший ответ Сообщение было отмечено Crash94 как решение

Решение

Crash94, выставьте в настройках проекта выравнивание структур на 1
По умолчанию стоит на 32 или на 64, в зависимости от создаваемого проекта.
1
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,358
16.11.2019, 19:14 3
liv, в настройках - слишком жёстко, может ударить как по производительности, так и по свободе багов!

Достаточно обобернуть структуру

C++
1
2
3
4
5
6
7
8
9
#pragma pack(push,1) //сохранили старое выравнивание в "стек" , начало нового выравнивания на 1
struct BmpHead
{
    uint16_t bftype;
    uint32_t bfsize;
    uint32_t rez1;
    uint32_t bfoffbits;
};
#pragma pack(pop) //возврат старого выравнивания
0
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
16.11.2019, 20:42 4
Алексей1153, пожалуй, Вы правы, так будет лучше.
0
16.11.2019, 20:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2019, 20:42
Помогаю со студенческими работами здесь

Не считывается полностью структура
Необходимо загрузить содержимое файла в структуру и проиндексировать. Не получается загрузить...

Неправильно считывается содержимое текстового файла в Memo
Помогите, почему у меня когда считывается в текстового файла в memo выводит всякие символы, почему?

Неправильно считывается значение Caption
Доброго времени суток. Есть меню, в котором динамически создается кнопка. Ее свойству Caption...

Неправильно считывается файл
Помогите пожалуйста, что тут не так с записью, не могу разобраться, вроде бы всё правильно...

Неправильно считывается строка
Прошу помощи. Делаю считывание настроек из ini файла с помощью Properties (...

Неправильно считывается диапазон значений функции
Вычислить значения функции, если диапазон изменения аргумента и его шаг заданы. Диапазон...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru