Я пытаюсь прочитать файл в определенном формате файла в c.
файл содержит некоторые элементы данных. каждый элемент данных разделен флагом.
файл должен выглядеть так:
file-header: "FIL0"
file-id: 0x1020304
flag : 0|1 : uint8_t
length : uint32_t
char[length] : int utf-8
so its: [File-Header] [FileID] [Flag | Length | Data ] [Flag | Length | Data] ...<br>
--> "FIL0" | 0xFFFFFF | 0 or 1 | Data as char[] | 0 or 1 | ... (next data item) ....
Моя проблема возникает при чтении в файл. Моя идея состоит в том, чтобы открыть файл и сканировать его, используя некоторую магию sscanf.
FILE *fp;
fp = fopen("data.dat". "r");
/* scan file for data components */
while (fgets(buffer, sizeof buffer, fp) != NULL) /* read in file */
{
/* scan for sequence */
if (sscanf(buffer, "%5s", fil0_header) == 1) /* if the "FIL0" header is found */
{
printf("FIL0-header found: %s\n", buffer);
// proceed and scan for [FLAG] [LENGTH] [DATA]
// sscanf()
if (sscanf(buffer, "%u", node) == 1)
{
// doesnt seem to work
}
// read in length of string and extract stringdata
else
{
printf("FIL0-Header not found, found instead: %s\n", buffer);
// do something
}
}
Моя проблема в том, что мне трудно работать с буфером и различными типами данных в файле.
Сравнение заголовка fil0 работает нормально, но:
- как читать следующий шестнадцатеричный номер (sscanf с использованием% D)
- как отсканировать флаг размером 1 байт
- как извлечь длину 4 байта
Проблема в том, что проверка флага начинается в начале буфера.
но указатель должен быть перемещен после того, как заголовок FIL0 найден.
Буду благодарен за любую помощь!
Пожалуйста, помогите мне найти подходящие sscanf () -тзывы:
и хочу прочитать его и получить отдельные части моего файла:
На одном [File-Header]
и многие {[FileID] [Flag | Длина | Данные]} {...} items