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

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

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

Чтение бинарного файла: определить длину кодограммы вместе с заголовком, тип, и смещение - C++

19.05.2014, 16:40. Просмотров 506. Ответов 1
Метки нет (Все метки)

Имееться бинарный файл с кодограммами и мусором.Каждая кодограмма начинаеться с АААА(16-ричный формат), 3-байт - мусор, 4 - тип. Нужно определить длину кодограммы вместе с заголовком(АААА), вывести тип, и смещение(позиция начала кодограммы относително начала файла).Для определения длины вроде функция ftell() но не понимаю куда ее втыкнуть, как смещение определить вообще не догоняю. Буду рад любой помощи.
Мой код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <vcl.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>
 
int main(int argc, char* argv[])
{
  
 
  int type;
   //int pos;
  char ch;
  std::vector<char> oneElement;
  FILE *fs;
  fs=fopen("D:\\Temp\\Learn\\sdfsdfsd\\Files\\20140302-080000.cu","rb");
 
  if (fs == NULL) printf ("Error\n");
   else printf ("Execute\n");
    while (true)
    {
    //long int pos;
    char tmp;
        fread(&tmp, 1,1,fs);
        if (feof(fs))
      break;
 
        if(tmp == (char)0xAA)
        {
      oneElement.push_back(tmp);
            if(oneElement.size() == 2)  //size() vozvrashaet col-vo el-tov v vectore
            {
        printf("Set position in 4 byte:");
 
        if ( fseek (fs,4,SEEK_CUR)==0)
          printf("Execute\n");
        else
          printf("Error\n");
 
        type=fgetc(fs);
        printf("Type of codogramm:%x",type);
        printf("Opredelenie dlini:");
       /* // Opredelenie dlini
        pos = ftell (fs);//dla binarnih vozvrashaet kol-vo byte ot nachla
 
        if (pos == -1) printf("Error\n");
        else printf("Dlina%x",pos);
 
        */
                oneElement.clear();
      }
    }
    else
      oneElement.clear();
  }
 
  if ( fclose (fs) == EOF) printf ("Error\n");
 
 
 
  system("pause");
 
    return 0;
}
Добавлено через 4 часа 34 минуты
Неужто такая сложная задача, что никто не подскажет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение бинарного файла: определить длину кодограммы вместе с заголовком, тип, и смещение (C++):

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

Определить длину бинарного (или произвольного) дерева - C++
Определите длину бинарного(или произвольного) дерева (т.е. длину максимальной ветви) Visual studio c++, консольный режим. Можно пожаласт...

Чтение из бинарного файла - C++
Здравствуйте. У меня имеется некий класс Product, объекты которого хранятся в объекте класса Vector. Есть функция записи вектора в бинарный...

Чтение бинарного файла - C++
Помогите, пожалуйста, научите, как правильно читать файлы! Есть бинарный файл. В нем хранятся шеснадцатиричные числа. (по 40 чисел в...

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

Чтение бинарного файла - C++
Привет! Необходима помощь в таком вопросе - Создал программу для хранения сведений о пользователях(типа такого: введите сведения: ...

1
Ugin
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 6
02.06.2014, 09:10  [ТС] #2
Так никто и не подсказал. Жаль. Логическое завершение, может кому понадобиться
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <vcl.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>
 
struct SCodogramInfo
{
  unsigned char Type;
  int           Len;
  DWORD         Offset;
  int temp;
};
 
void codogrAnalis();
 
int main(int argc, char* argv[])
{
 
  SCodogramInfo info;
  bool info_valid = false;
 
  unsigned int pos;
  int count;
 
//  std::vector<char> lastCodogram; //variant porostogo vivoda poslednei codogrammi bez dobavlenia v massiv structur s odnim vector(esli tipi sovpadaut)
//  std::vector<unsigned char> tip; //variant porostogo vivoda poslednei codogrammi bez dobavlenia v massiv structur
//  std::vector<DWORD> ofs;
  std::vector<char> oneElement;
  std::vector<SCodogramInfo> codograms;
 
 
  FILE *fs;
  fs=fopen("D:\\Velichko\\project_1_1\\test.cu","rb");
 
  if (fs == NULL)
  {
    printf ("ERROR: file does not exist or broken!!!\n");
    system("pause");
    return 0;
  }
  printf("Offs(smechenie)----->Tekusha ot nachala file pozicia codogrammi c uchetom zagolovka v bytes.\n\n");
  void codogrAnalis();
 
  void codogrAnalis();
  {
  while (true)
  {
 
      char tmp;
      DWORD lastOffset;
 
      fread(&tmp, 1,1,fs);
 
       if(feof(fs))
        {
          lastOffset=ftell(fs);
          info.Len = lastOffset - info.Offset;
          codograms.push_back(info);
          break;
        }
//      if (feof(fs))
//      break;
      else
      if(tmp == (char)0xAA)
      {
        oneElement.push_back(tmp);
 
        if(oneElement.size() == 2)  //size() vozvrashaet col-vo el-tov v vectore
        {
            count++;
 
            pos = ftell (fs);
 
            if (info_valid)
            {
              info.Len = (pos-2) - info.Offset;
              codograms.push_back(info);
            }
 
            info.Offset = (pos-2);
//            ofs.push_back(info.Offset);
//            lastCodogram.push_back(info.Offset);
 
 
            if ( fseek (fs,1,SEEK_CUR)!=0)// cnachala 1byte ff potom 2,1 propuskaem -> ustanovka na 4 byte
            {
              printf("Error\n");
            }
 
            fread(&info.Type, 1, 1, fs);
//            tip.push_back(info.Type);
//            lastCodogram.push_back(info.Type);
 
 
 
//            printf("Type of codogramm:%02x\n",info.Type);   //dla otladki
 
//            printf("Smechenie :%08d\n",(pos-2));
 
 
 
 
            info_valid = true;
 
            oneElement.clear();
 
        }
      }
      else
        oneElement.clear();
  }
 
  fclose (fs);
  }
  printf("=====================\n\n");
  printf("Number of codograms: %d\n\n",count);
  printf("=====================\n");
  for(unsigned int i=0; i<codograms.size(); i++)
  {
    printf("Offs, bytes: %08d\n", codograms[i].Offset);
    printf("Type: %02x\n", codograms[i].Type);
    printf("Length, bytes: %02d\n", codograms[i].Len);
    printf("=====================\n");
 
  }
/*  printf("Offs, bytes: %08d\n",ofs.back());
    printf("Type: %02x\n",tip.back());
//    printf("Offs, bytes: %08d\n",lastCodogram[lastCodogram.size()-2]);
//    printf("Type: %02x\n",lastCodogram.back());    */
 
 
  system("pause");
 
  return 0;
  }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2014, 09:10
Привет! Вот еще темы с ответами:

Чтение бинарного файла - C++
подскажите пожалуйста как можно из любого файла(*.bmp, *.mp3, *.avi и т.д.) получить двоичное представление этого файла или хотя бы считать...

Чтение из бинарного файла - C++
Здравствуйте. Столкнулся с проблемой, не до конца понимаю от чего она возникает и как решить её. Открываю для чтения файл в бинарном...

Чтение из бинарного файла - C++
Уважаемые форумчане! Прошу помочь мне с чтением из бинарного файла. Проблема следующая. Есть функция, которая пишет в бинарный файл -...

Чтение из бинарного файла - C++
Добрый вечер.Возникла проблема при чтении имени объекта из бинарного файла,запись в файл идет по структуре |char|int|double|float|'/0'|...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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