Форум: "Прочее";
Текущий архив: 2013.03.31;
Скачать: [xml.tar.bz2];
Внизpacket/не packet Найти похожие ветки
← →
Дмитрий С (2012-12-03 19:31) [0]Нашел где-то такой код:
TDBFHeader = record
VerDBF : Byte; // 0 - версия dbf-файла
Year : Byte; // 1 - год последнего обновления
Month : Byte; // 2 - месяц последнего обновления
Day : Byte; // 3 - день последнего обновления
RecordCount : Integer; // 4-7 - количество записей в файле включая удаленные
HeaderSize : Word; // 8-9 - размер заголовка (в байтах)
RecordSize : Word; // 10-11 - размер записи (в байтах)
Dummy1 : Word; // 12-13 - зарезервировано
Transaction : Byte; // 14 - флаг незавершенной транзакции dBASE IV
Encrypt : Byte; // 15 - флаг зашифрованности таблицы dBASE IV
MultiUse : Integer; // 16-19 - зарезервировано для сетевого
LastUserID : Integer; // 20-23 использования - dBASE IV, dBASE V
Dummy2 : Integer; // 24-27 - зарезервировано
MDXFlag : Byte; // 28 - флаг наличия MDX-файла
Language : Byte; // 29 - ID драйвера языка (кодовая страница)
Dummy3 : Word; // 30-31 - зарезервировано
end;
Вот интересно, а какой он имеет смысл, если считать его такой структурой нельзя одним махом из-за выравниваний?
← →
brother © (2012-12-03 19:42) [1]ты о чем? смущает TDBFHeader?
так он может откуда угодно получать значения...
← →
брат Птибурдукова (2012-12-03 19:44) [2]*пожимая плечами* ну может в настройках проекта или ещё где выравнивание выключено. а может он не использовался с тех времён, когда выравнивание не было включено по умолчанию
← →
Ваще имя (2012-12-03 19:48) [3]Ну так размер структуры зависит от значения выравнивания с которым компилировали.
Перефразируйте, а то действительно слабо улавливается суть вопроса.
← →
Sapersky (2012-12-03 20:17) [4]Вручную всё выровнено. Можешь проверить, packed/не packed - без разницы.
Собственно, смысл выравнивания - чтобы переменные не пересекали 4(8) байтовые границы. Т.е. если имеем Byte, потом Integer - Integer сдвинется на 3 байта. Но если все Byte/Word сгруппированы пачками по 4 байта (как здесь), Integer не будут сдвигаться.
← →
wl (2012-12-03 21:14) [5]
> Sapersky (03.12.12 20:17) [4]
а что будет на x64? полагаю всё развалится? или int в делфи всегда 32-битный
← →
Sapersky (2012-12-03 21:25) [6]Да, всегда 32-битный.
← →
Ваще имя (2012-12-03 21:42) [7]
> packet/не packet
> packed/не packed
Хех, всего одну букву испохабил, и несколько человек ломают головы над смыслом.
← →
Дмитрий С (2012-12-03 23:21) [8]
> Ваще имя (03.12.12 21:42) [7]
>
>
Пардон)
> Sapersky (03.12.12 20:17) [4]
Буду знать, спасибо. Но все-равно как-то странно.
← →
Кука съела ник (2012-12-04 00:09) [9]
> packet/не packet
If a packet hits a pocket on a socket on a port,
And the bus is interrupted as a very last resort,
And the address of the memory makes your floppy disk abort,
Then the socket packet pocket has an error to report!
← →
Ваще имя (2012-12-04 00:37) [10]Sapersky, отлично сказано!
Дмитрий С, есть простое правило: если структуру планируется хранить в файле, то объявляем её упакованной, остальное делает компилятор, а у человека не болит голова от подсчета смещений и размеров.
Хотя здесь я бы не рассчитывал на простой тип Integer, а объявил бы, используя фундаментальный LongInt, который гарантированно 32-битный у любого компилятора на любой платформе.
← →
Vegeta (2012-12-04 00:49) [11]Автор кода, скорее всего, не знал или забыл о выравнивании. Либо код тянется со времен ранних версий паскаля.
← →
Германн © (2012-12-04 02:40) [12]
> Sapersky (03.12.12 20:17) [4]
>
> Вручную всё выровнено. Можешь проверить, packed/не packed
> - без разницы.
>
Выровнено да. Но для компилятора какой версии ТП/Д такое описание структуры будет правильным?
← →
O'ShinW (2012-12-04 08:49) [13]
> packet
и в message, и на диск
Иначе проблемы могут быть. А могут и не быть. А оно надо? :)
← →
Ваще имя (2012-12-04 09:36) [14]
> Но для компилятора какой версии ТП/Д такое описание структуры
> будет правильным?
Очевидно, что правильным будет для ископаемого компилятора, который не поддерживает выравнивание совсем. Добро пожаловать в восьмидесятые.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c