|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как правильно прочитать данный бинарный файл?
Здравствуйте, уважаемые форумчане.
Есть у меня такой map-файл: lite.7z Открыв его, к примеру, через HexEditor, вы увидите в нем зашифрованную карту игровой местности: hex1.png Как Вы видите, первые 3 значения (системные данные карты - глубина, ширина, номер чанка) соответствуют UInt32. Как мне полностью правильно прочесть файл, чтобы получить 32хбитные данные, с которыми я потом смогу работать? |
#2
|
|||
|
|||
Ну так и читай их как UInt32.
Если Delphi совсем старая, то используй тип cardinal - это тоже самое. Код:
var Stream := TFileStream; D : Cardinal; begin Stream := TFileStream.Create(FileName, fmOpenRead); While Stream.Position < Stream.Size Do Begin Stream.ReadBuffer(D,SizeOf(Cardinal)); // Здесь делаешь что нужно с очередным числом End; Stream.Free; end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
VolodinAS (19.09.2018)
|
#3
|
|||
|
|||
Цитата:
Delphi XE3 - это старая? |
#4
|
|||
|
|||
Цитата:
Спасибо! Вы мой герой! |
#5
|
|||
|
|||
Цитата:
Простите, вопрос такой. Учитывая специфику Вашего кода, возможно ли прочитать файл в несколько потоков? Возможно ли как-то, к примеру, разбить файл по размеру (типа, от 0 до 1024, 1025-2048 и т.д.), чтобы быстрее получилось прочесть его? |
#6
|
|||
|
|||
Да, можно. Т.к. файл, по твоим словам, содержит только 32-битные инты, то можно вычислить позицию, с которой начинается соотв. кусок и сделать Stream.Seek на эту позицию. Только тогда еще надо будет "выбрасывать" этот код в отдельные потоки и учитывать синхронизацию этих потоков. Оно тебе надо?
|