![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FileRead({record тип}, SizeOf({record тип})); [D6]
Vitalis © (2002-07-01 20:24:00)НАрод, вот кусок кода:
type
TMAIN_HEAD = record
HEAD_CRC : Word;
HEAD_TYPE : Byte;
HEAD_FLAGS : Word;
HEAD_SIZE : Word;
RESERVED1 : Word;
RESERVED2 : Cardinal;
end;
....
procedure ABC;
var Rec : TMAIN_HEAD;
begin
FileOpen(...);
FileRead(..., Rec, SizeOf(Rec));
end;
у меня в файле, например, такие байты: 01 02 03 04 05 06 07 08 09...
Получайтся:
Rec.HEAD_CRC = 01 02;
Rec.HEAD_TYPE = 03;
Rec.HEAD_FLAGS = 05 06; // Почему пропускается 1 байт????
Rec.HEAD_SIZE = 07 08;
Дальше все идет с тем же сдвигом на 1 байт.
И еще: почему SizeOF - возвращает 16, а не 13????
Че делать????
Vitalis (2002-07-01 22:59:00) [1]Все, понял. Оставил 8 а свои записи поставил packed record. Thx 2 all
Volj (2002-07-01 21:00:00) [2]2Anatoly Podgoretsky:
Присоединяюсь.
2Vitalis: Ставь величину, равную минимальному размеру используемой переменной. А еще лучше, используй Packed record.
Anatoly Podgoretsky (2002-07-01 20:55:00) [3]Есть такое волшебное слово packed record
а так да, для скорости, жалко что 16 не хватает
Vitalis (2002-07-01 20:52:00) [4]У меня D6 - там выбор: 1, 2, 4, 8. А зачем вообще это нужно? Для быстродействия?
Volj (2002-07-01 20:38:00) [5]Попробуй снять галочку "aligned record fields" в Project Options|Compiler