Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 25.09.2014
Сообщений: 49

Бинарный файл известной структуры

18.05.2018, 20:22. Показов 1195. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.У меня есть бинарный файл(неизвестного формата),есть описание его структуры.Мне нужно считать эти данные.Вот код,который я написал:
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
include <stdio.h>
struct pole0
{
    unsigned int a1;
    short int a2;
    long int a3;
    long int a4[16];
    float a5;
    float a6;
    float a7;
    float a8;
    float a9;
    float a10;
    float a11;
    float a12;
    float a13;
    float a14;
    float a15;
    float a16;
    float a17;
    float a18;
    float a19;
    float a20;
    float a21;
    float a22;
    long int a23;
    float a24;
    float a25;
    float a26;
    float a27;
    float a28;
    float a29;
    float a30;
    float a31;
    unsigned  int a32;
 
 
};
 
 
 
 
int main()
{
    int i;
    
   struct pole0 a;
   unsigned int buf[sizeof(a)];
   short int buf1[sizeof(a)];
   long int buf2[sizeof(a)];
   float buf3[sizeof(a)];
 
   FILE *f=fopen("E:/qt/projects/ispytaenie/20110601_31N016_An2_Chernoe.cn3","rb");
   fread(&buf,sizeof(a),1,f);
   fread(&buf1,sizeof(a),1,f);
   fread(&buf2,sizeof(a),1,f);
   fread(&buf3,sizeof(a),1,f);
   printf("1)%x\n",buf[0]);
   printf("2)%hi\n",buf1[1]);
   printf("3)%li\n",buf2[2]);
   printf("4)%li\n",buf2[3]);
   for(i=4;i<22;i++)
       printf("%d)%li\n",i+1,buf3[i]);
 
   printf("24)%li\n",buf2[22]);
   for(i=23;i<31;i++)
        printf("%d)%f\n",i+1,buf3[i]);
 
      printf("%u)%x\n",i+1,buf[31]);
 
 
 return 0;
}
Вот описание протокола обмена:
Данные передаются пакетами байтов. Структура пакета данных:
1) Заголовок (2 байта).
2) Тело пакета (поля данных)
3) Контрольная сумма (2 байта).
Заголовок каждого пакета состоит из 16 бит и уникален для каждого типа пакета.
Контрольная сумма вычисляется применением бинарной операции XOR на весь пакет,
представленный в виде массива 16 битных величин, кроме самой контрольной суммы.
Все данные (int ,float, long) передаются пользователю в формате, совместимом с ПК на
базе x86 процессора, поля данных в байтовом потоке передаются в таком же порядке, что
и хранятся в памяти ПК2, т.е. сначала идут младшие байты, затем старшие.
Пакеты передаются пользователю без запроса и содержат:
а) информацию приёмника СНС;
б) комплексированную информацию;
в) параметры движения объекта.
В приложении-структура пакетов.
Преподаватель по поводу моего кода написал следующее:

У тебя 2 принципиальные ошибки:
1) Данные записываются таким образом, что начало файла может быть и не началом пакета
2) По мимо основного пакета с заголовком FACE есть еще 12 пакетов СНС с заголовками от A511 и т.д.

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

Я изучаю Си,пока знаю не все нюансы.
Если кто-то может-подскажите,что исправить или добавить.Спасибо!
Миниатюры
Бинарный файл известной структуры  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2018, 20:22
Ответы с готовыми решениями:

Запись структуры в бинарный файл
если вам покажутся мои вопросы глупыми, не удивляйтесь, решил сам с нуля изучать си, есть книжки интернет и вы =) нужно записать...

Запись структуры в бинарный файл , пример
Здравствуйте . Есть ли у кого то пример программы записи структуры в бинарный файл, и вывод оттуда. Буду благодарна

Запись структуры в бинарный файл происходит некорректно
Доброго времени суток. Вопрос по си: запись структуры в файл происходит некорректно, т.е. все char записываются без каких-либо проблем,...

1
1 / 1 / 0
Регистрация: 07.05.2018
Сообщений: 19
22.05.2018, 09:18
Цитата Сообщение от iAlexander Посмотреть сообщение
1) Данные записываются таким образом, что начало файла может быть и не началом пакета
Возможно имеется ввиду, что Вы начинаете читать файл, с учётом, что в нём находится только одна Ваша структура. А думать надо, что там куча всякого барахла, и ваша структура где-то в этом барахле лежит.
Цитата Сообщение от iAlexander Посмотреть сообщение
2) По мимо основного пакета с заголовком FACE есть еще 12 пакетов СНС с заголовками от A511 и т.д.
Вот здесь преподаватель как раз об этом и говорит, насколько я понял.

Цитата Сообщение от iAlexander Посмотреть сообщение
Т.е.е тебе надо поменять идею программы - надо считывать данные в буфер - потом искать в нем заголовок пакета FACE - собирать весь пакет по длине - проверять контрольную сумму - если она сходится, значит пакет правильный и его можно использовать.
Здесь он предлагает, видимо, забрать в буфер весь файл, и уже в буфере сначала найти заголовок FACE, а после уже заполнить структуру.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2018, 09:18
Помогаю со студенческими работами здесь

Запись структуры в бинарный файл и чтение из него
Доброго времени суток. Заранее прошу прощения, если такая тема уже была, но я ничего не смог найти толкового, что помогло бы мне...

Удалить из списка информацию (структуры) и записать в бинарный файл
Вообщем есть информация о 5 спортсменах в виде 1) Фамилия 2) номер 3) очки (что я и сделал в заготовке) Записать в файл те...

Сформировать бинарный файл из элементов заданной структуры «Пациент»
Привет всем. Есть задача: Сформировать бинарный файл из элементов, заданной структуры«Пациент»: фамилия, имя, отчество; домашний адрес;...

Построчное чтение из файла, заполнение структуры и запись в бинарный файл
Здравствуйте. Пытаюсь сделать чтение из текстового файла построчно, а затем сразу забиваю в структуру полученное и пишу в бинарный...

Создать структуру и написать функцию, которая записывает в бинарный файл данные о сканере из структуры
Сама структура имеет вид: struct scan_info{ char model; // наименование модели int price; // цена double x_size; //...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru