|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется14.02.2016, 12:26. Показов 4001. Ответов 16
Метки нет (Все метки)
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла проблема, я не знаю как его читать. Дело в то что начало 5 байт - Идентификатор
Файла-карты для программразличных версий. Дальше идет структура - 32 байта, дальше переменная 4 байта, дальше опять идет структура, она может быть одна, а может и 100 штук - размер одной 47 байт, далее идет следующая структура, ее размер 614 байт, она также может быть одна или несколько, как читать этот бинарный файл не пойму. Подробности структуры и т.д. в файле, который находится в приложении.
0
|
|
| 14.02.2016, 12:26 | |
|
Ответы с готовыми решениями:
16
Чтение вектора структур из бинарного файла
Чтение массива структур из бинарного файла |
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
|
| 14.02.2016, 12:55 | |
|
Вы не знаете как читать бинарный файл с определённого места? Установить позицию, пользуясь функцией lseek().
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 13:16 [ТС] | |
|
Прочитайте внимательно мою тему. Как мне понять по сколько считывать структуры ? Может быть так:
5 + 32 + 4 + 47, может быть 5 + 32 + 4 + 47 + 614, может быть 5 + 32 + 4 + 47 + 47 + 47 + 47 + 614 + 614. И как понять где закончилась одна структура, а где началась другая ?
0
|
|
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
||
| 14.02.2016, 14:07 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 14:20 [ТС] | |
|
Нет, с начало идет 5 байт - Идентификатор Файла-карты для программ различных версий, далее идет 32 байта - Заголовок файла-карты и резервная область, затем идет 4 байта Pos2, затем 47 байт(структура, может быть несколько,каждые 500 метров это 47 байт), а затем 614 байт(структура, может быть несколько)
0
|
|
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
|
| 14.02.2016, 14:27 | |
|
5+32+4 -постоянно присутствующие части. В них содержится информация, сколько будет блоков по 47, сразу за этим большим заголовком, и с какой позиции начинаются списки из 614 байтных структур. Где трудность?
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 15:22 [ТС] | |
|
Так немного понимать начинаю. Получаем структуру, где 32 байта, и получаем число блоков по 47 байтов, я так понял. А получить начало структуры по 614 как ? Это в Pos2 написано ? Можешь пожалуйста помочь разобрать файл небольшой, я описал вроде структуры все на С++, но как разобрать еще не понимаю до конца, задали на практике, завтра нужно показать результат, а у меня ничего пока что, могли бы в скайпе связаться и т.д., хочется разобраться
0
|
|
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
||||||
| 14.02.2016, 16:18 | ||||||
0
|
||||||
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
|
| 14.02.2016, 17:51 | |
|
Я не хочу общаться напрямую. Что еще вам подсказать?
стр. 66, 77 - выделяем память либо под один чанк, либо под весь набор. (смнеить 1 на закоменченое в скобках) стр. 69, 80 - обрабатываем очередной чанк, (соответственно, меняем индекс, если вычитываем весь набор.) структуры доописать, с этим проблем быть не должно. //just do it!! - меняем на ваш обработчик чанка.
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 19:12 [ТС] | |
|
Изменить формат на .map. Попробуйте его разобрать
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 22:55 [ТС] | |
|
Получилось что-то ?
0
|
|
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
||||||
| 14.02.2016, 23:10 | ||||||
|
А вы сами-то попробовали?
0
|
||||||
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 23:19 [ТС] | |
|
Тот файл, что я скинул, в нем вообще нет структуры в 614 байт. В нем 135 байт = 5 + 32 + 4 + 47 + 47. Может быть и такой случай, что 614 байт не будет.
0
|
|
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
|
| 14.02.2016, 23:22 | |
|
со 165 по 171 строчку вывод дополнительной информации, и в ней размер описанной 614 байтной структуры = 610.
Нестыковка, однако.
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 14.02.2016, 23:53 [ТС] | |
|
А как ее можно вообще считать, если ее в файле просто напросто нет вообще
Файл *.map представляет собой бинарный файл, в котором содержится информация, представленная ниже. Формат файла предполагает разбиение всех километровых участков, разделенных на 500-метровые участки (тип записи zagkm). Например, при создании электронной карты, состоящей из одного 1-км участка, в файле *.map будут присутствовать две записи zagkm. Если данная электронная карта не будет содержать никаких объектов, то запись InfoFile будет отсутствовать. Соответственно, минимально возможный объем электронной карты может составить 135 байт (5+32+4+47*2). При добавлении очередного 1-км участка объем файла будет увеличиваться на 94 байта (47*2). При добавлении на карту нового объекта (запись InfoFile) объем файла будет увеличиваться на 614 байт.
0
|
|
|
1 / 1 / 2
Регистрация: 25.05.2015
Сообщений: 33
|
||
| 15.02.2016, 00:03 | ||
|
Еще раз.
Описанную в коде структуру компилятор считает имеющей размер 610 байт. Вы не видите здесь некоторой нестыковки, могущей иметь серьёзное воздействия на корректность работы программы? Может, следует разобраться с этим? И кстати, минимально возможный размер может быть 5+32+4, разве не так?
0
|
||
|
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 10
|
|
| 15.02.2016, 00:51 [ТС] | |
|
Нет, минимальный 5+32+4+47
Добавлено через 16 минут Я думаю у вас где-то ошибка вышла, смотрите LinAddr: LongInt 4 байта Tip: byte 1 байт Road: byte 1 байт Nazvanie: array[1..8] of char 8 байт SGreen: word 2 байта SYellow: byte 1 байт Uklon: byte 1 байт Width: word 2 байта Uklon2: word 2 байта En_Speed: array [1..6,1..49] 588 байт Id: LongInt 4 байта Вот и получается 4 + 1 + 1 + 8 + 2 + 1 + 1 + 2 + 2 + 588 + 4 = 614 байт Добавлено через 30 минут Кстати, в компиляторе показывает 614 байт, вы не правильно определили структуру.
0
|
|
| 15.02.2016, 00:51 | |
|
Помогаю со студенческими работами здесь
17
Чтение информации для вектора структур, из бинарного файла Как сделать чтение определенной переменной из бинарного файла Внешняя сортировка бинарного файла (чтение после конца файла невозможно) Запись из бинарного файла, в массив структур
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|