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

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

Восстановить пароль Регистрация
 
Ugin
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 6
19.05.2014, 16:40     Чтение бинарного файла: определить длину кодограммы вместе с заголовком, тип, и смещение #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 минуты
Неужто такая сложная задача, что никто не подскажет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 16:40     Чтение бинарного файла: определить длину кодограммы вместе с заголовком, тип, и смещение
Посмотрите здесь:

C++ Чтение из бинарного файла
чтение бинарного файла C++
Чтение бинарного файла C++
C++ Определить длину бинарного(или произвольного) дерева
C++ Чтение из бинарного файла
C++ Чтение из бинарного файла
Чтение бинарного файла C++
C++ Чтение из бинарного файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
  }
Yandex
Объявления
02.06.2014, 09:10     Чтение бинарного файла: определить длину кодограммы вместе с заголовком, тип, и смещение
Ответ Создать тему
Опции темы

Текущее время: 07:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru