Как прочитать файл со смешанными двоичными данными и данными ASCII, используя переполнение стека

Мне нужно прочитать файл со смешанными двоичными и ASCII-данными, используя C ++ и чистый стандарт (без Boost). Эти данные обычно содержат смесь вложенных двоичных и ASCII-заголовков, за которыми следуют двоичные данные и данные, разделенные запятыми. Данные плохо выровнены, и двоичные заголовки определяют количество байтов данных ASCII, которое может изменяться от заголовка к заголовку. Часть данных будет выглядеть так:

[binary header][binary data]The,ASCII,data,[binary header][binary data]is,not,continuous,...

Я нашел хорошие уроки, используя читать для двоичных данных и GetLine для данных ASCII, и я знаю, что я могу читать побайтово, используя символы, но мне было интересно, приходилось ли кому-либо из вас сталкиваться с этой ситуацией раньше, и у меня были какие-либо полезные предложения о том, как наилучшим образом решить эту проблему.

3

Решение

Если вы хотите проанализировать файл, вам нужно заранее знать, как он создается.

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

Если у вас есть смесь двоичных данных и данных ASCII, вы должны прочитать их как двоичный файл.

Символы ASCII — это не более чем двоичные числа, которые представляют читаемые символы.

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

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

Например:

#include <stdio.h>
#include <stdlib.h>

typedef struct mystruct_st
{
int var1;
char var2;
char text[10];
}mystruct_t;

mystruct_t mystruct;

int main () {
FILE * pFile;

pFile = fopen ( "myfile.bin" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

fread (&mystruct,sizeof(mystruct_t),1,pFile);

fclose (pFile);
return 0;
}
3

Другие решения

Единственная реальная проблема — знать, где вы переключаетесь между
форматы в файле. Вам придется открыть файл в двоичном виде
режим (но это обычно так для переносимых файлов
тем не мение). Помимо этого, вы должны признать, когда переключаться
между двоичным форматом (который вы должны будете реализовать,
потому что нет в стандарте) и текстовый формат.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector