![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 на эту позицию. Только тогда еще надо будет "выбрасывать" этот код в отдельные потоки и учитывать синхронизацию этих потоков. Оно тебе надо?
|