Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DWORD в Pascal (Turbo Pascal 7.0)

18K
18 апреля 2008 года
M@D_BuLL
14 / / 29.10.2006
У меня несколько вопросов:

1. Необходимо введение переменной на 4 байта (DWORD), но не longint, т.к. та знаковая.(Мне это необходимо при создании структуры, в которой будет храниться заголовок файла BMP, там есть как переменные типа LONG, так и DWORD.) Подскажите, есть ли способ сделать это? Возможно каким-либо образом через ассемблер?

2. Как можно грамотно считать данные из файла в несколько созданных структур, чтоб их потом обработать. (Я хотел обрабатывать файл как file of byte, потом преобразовывать байты в данные структуры, но потом увидел чтение файлов процедурами blockread\blockwrite, но не совсем понимаю специфику их использования)

Заранее спасибо.
551
18 апреля 2008 года
Pavia
357 / / 22.04.2004
Обычно делаю так DWord=longint. Подругому этот тип не определить система просто невоспримит числа больше longint. А размер сорозмерный.
Обычно это не критично. И обработка идет как с longint, а если хочешь понастоящему то придеться описывать все функции ручками начиная от умножения, деления и заканчивая функциями слоожения.
И использовать в коде как c:=Add(imul(a,b),c)

Темболее что размер картинки изредка достигают таких размеров. Даже майкрософт порой обрабатывает такии поля как знаковые. =(
551
18 апреля 2008 года
Pavia
357 / / 22.04.2004
blockread\blockwrite Хелп почитай
делаешь указатель на структуру и он считает ее.
TMyRecord=
a,b,c:DWord;
end;

pp:TMyRecord;

BlockRead(f,pp, SizeOf(pp))
1.9K
18 апреля 2008 года
andriano
474 / / 10.01.2008
1. Отсутствие беззнакового 32-разрядного типа - проблема не уникальная. Даже в Win98SE часть системного кода выполнена с использование знакового типа вместо беззнакового.
Фактически ты лишаешься возможности работать с файлами длинее 2 Гб. Собственно, для 16-разрядного кода, думаю, это неизбежно.

2. Смотри справку. Единственное тонкое место, открывать файл в подавляющем большинстве случаев следует не reset(f); а reset(f,1);
Вот на эту единичку обрати внимание, т.к. по умолчанию длина записи равна 128 байт, что в свое время было перенесено из ОС CP/M-80.
18K
21 апреля 2008 года
M@D_BuLL
14 / / 29.10.2006
Спасибо за ответ.
Я сделал так:
1. type DWORD=longint;
Это на всякий случай, на будущее, вдруг придумаю как решить проблему с DWord.
2. За blockread спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог