Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
#1

Чтение файла в структуру - C++

09.07.2014, 11:57. Просмотров 271. Ответов 8
Метки нет (Все метки)

Всем привет!
Есть бинарный файл test.txt, в нём заголовок, который я пытаюсь прочитать в структуру, но что-то не идёт...
Содержание файла (от балды):
61 11 20 11 20 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0
код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
struct MyStruct
{
    unsigned char c;
    unsigned int i;
};
 
int main()
{
    FILE * MyFile = fopen ("c:\\cpptest\\test.txt", "r");
 
    MyStruct a;
    a.c=0;a.i=0;
    int StructSize=5;
 
    for(int i = 0;i<10;i++)
    {
        fseek(MyFile,i,SEEK_SET);
        fread(&a,StructSize,1,MyFile);
        cout << a.c << "\t";
        cout << a.i << "\n";
    }
    
    fclose(MyFile);
}
Я ожидал, что первый байт пойдёт в Unsigned Char, а ещё 4 в Insigned Int. Но в него идёт почему-то только последний пятый байт.

Выдача:
q 14
Є 15
[ 16
. 240
♫ 240
☼ 240
► 240
Ё 240
Ё 240
Ё 240
Для продолжения нажмите любую клавишу . . .
Добавлено через 16 минут
Ошибка в тексте файла, первые 8 байт:
71 f2 5b 2e 0e 0f 10 f0 f0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2014, 11:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение файла в структуру (C++):

Чтение файла в структуру - C++
Здравствуйте, не получается прочитать файл и компоненты записать в структуру. Допустим, содержание файла: 4 6 Text1 2 Text2 ...

Чтение из файла в структуру - C++
Здравствуйте, имеется функция чтения из файла в структуру и последующего вывода на экран: void ReadFileFromStrucure (int...

Чтение данных из файла в структуру - C++
Нужно считать данные с блокнота и поработать с ними. программу написала, но подчеркивает mass что не так #include &quot;stdafx.h&quot; ...

Чтение из текстового файла в структуру - C++
Всем привет, я новичок в C++. Испытав многое (безрезультатно) решил просить помощи у вас. Что необходимо: 1) Чтение из файла txt данных...

Чтение из бинарного файла в структуру - C++
Собственно вопрос в заголовке, есть структура: struct StructEmployee {; int id; string fullname; string...

Чтение данных из файла в структуру - C++
Необходимо считать данные из блокнота, а в последствии работать с ними,написала,но не работает, помогите , пожалуйста. int...

8
olper
24 / 24 / 11
Регистрация: 02.12.2013
Сообщений: 75
09.07.2014, 12:13 #2
http://www.cplusplus.com/reference/cstdio/fopen/
In order to open a file as a binary file, a "b" character has to be included in the mode string.
попробуй
C++
1
FILE * MyFile = fopen ("c:\\cpptest\\test.txt", "rb");
лучше
C++
1
int StructSize=sizeof(MyStruct);
или
C++
1
int StructSize=sizeof(a);
и имеет смысл

C++
1
2
3
4
5
6
7
#pragma pack(push,1)
struct MyStruct
{
    unsigned char c;
    unsigned int i;
};
#pragma pack(pop)
1
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
09.07.2014, 12:16  [ТС] #3
http://habrahabr.ru/post/142662/
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
09.07.2014, 12:28 #4
Зачем цикл? Ты читаешь по 5 байт, а позицию чтения сдвигаешь на 1.
0
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
09.07.2014, 13:28  [ТС] #5
цикл просто для анализа, просто поглядеть
0
AlexVRud
444 / 155 / 40
Регистрация: 04.07.2014
Сообщений: 443
09.07.2014, 19:39 #6
А кто тебе сказал что твоя структура занимает 5 байт?
При компиляции может (и будет) происходить выравнивание элементов структуры, например по 4-ре байта:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
struct MyStruct
{
    unsigned char c;
    unsigned int i;
};
 
int main()
{
    MyStruct m;
    std::cout << "Size = " << sizeof(MyStruct) << std::endl;
    std::cout << "ptr m  =" << &m << std::endl; 
    std::cout << "ptr m.i=" << &(m.i) << "(+" << ((int64_t)(&m.i)-(int64_t)(&m)) << ")" << std::endl;
    return 0; 
}
Т.е. в памяти будет выделятся 8-мь байт: [c][][][][i][i][i][i]
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
09.07.2014, 20:08 #7
Цитата Сообщение от olper Посмотреть сообщение
и имеет смысл
C++
1
2
3
4
5
6
7
#pragma pack(push,1)
struct MyStruct
{
    unsigned char c;
    unsigned int i;
};
#pragma pack(pop)

В данном случае оно не просто имеет смысл, а обязательно.
1
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
10.07.2014, 13:13  [ТС] #8
Спасибо всем! =)
0
Мотороллер
10.07.2014, 13:52     Чтение файла в структуру
  #9

Не по теме:

Цитата Сообщение от uglyPinokkio Посмотреть сообщение
В данном случае оно не просто имеет смысл, а обязательно.
вот же блин. а я два дня назад сидел и думал какого хера у меня байты сдвигаются при чтении бинаря в структуру ._. в итоге решил отказаться от структур (и от наглядности кода) и юзал оффсеты.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 13:52
Привет! Вот еще темы с ответами:

Построчное чтение из файла в структуру - C++
Всем доброго дня! Есть структура вида struct Product { char code; char name; double price;

Чтение данных из текстового файла в структуру - C++
Добры вечер новичках и профессионалам! Изучаю C++ только четыре месяца и сейчас разбираюсь с записью из файла (библиотека fstream). И...

Чтение из файла в список (двунаправленный), используя структуру - C++
Добрый день, немного запутался со списками, и файлом... Будьте добры, помогите разобраться. Есть файл, считываю информацию в список, а...

Запись структуры и чтение из файла в структуру ( как бы лучше ) - C++
Подкиньте идею как лучше записать структуру в файл и обратно из файла в структуру У меня есть мысль: даны 4 элемента вводим их в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2014, 13:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru