DWORD в Pascal (Turbo Pascal 7.0)
1. Необходимо введение переменной на 4 байта (DWORD), но не longint, т.к. та знаковая.(Мне это необходимо при создании структуры, в которой будет храниться заголовок файла BMP, там есть как переменные типа LONG, так и DWORD.) Подскажите, есть ли способ сделать это? Возможно каким-либо образом через ассемблер?
2. Как можно грамотно считать данные из файла в несколько созданных структур, чтоб их потом обработать. (Я хотел обрабатывать файл как file of byte, потом преобразовывать байты в данные структуры, но потом увидел чтение файлов процедурами blockread\blockwrite, но не совсем понимаю специфику их использования)
Заранее спасибо.
Обычно это не критично. И обработка идет как с longint, а если хочешь понастоящему то придеться описывать все функции ручками начиная от умножения, деления и заканчивая функциями слоожения.
И использовать в коде как c:=Add(imul(a,b),c)
Темболее что размер картинки изредка достигают таких размеров. Даже майкрософт порой обрабатывает такии поля как знаковые. =(
делаешь указатель на структуру и он считает ее.
TMyRecord=
a,b,c:DWord;
end;
pp:TMyRecord;
BlockRead(f,pp, SizeOf(pp))
Фактически ты лишаешься возможности работать с файлами длинее 2 Гб. Собственно, для 16-разрядного кода, думаю, это неизбежно.
2. Смотри справку. Единственное тонкое место, открывать файл в подавляющем большинстве случаев следует не reset(f); а reset(f,1);
Вот на эту единичку обрати внимание, т.к. по умолчанию длина записи равна 128 байт, что в свое время было перенесено из ОС CP/M-80.
Я сделал так:
1. type DWORD=longint;
Это на всякий случай, на будущее, вдруг придумаю как решить проблему с DWord.
2. За blockread спасибо.