Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.31;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1348238497
n_sch
2012-09-21 18:41
2013.03.31
Выборка данных из файла


15-1354108455
Дмитрий С
2012-11-28 17:14
2013.03.31
Равномерное заполнения SD карты.


15-1354870894
stas
2012-12-07 13:01
2013.03.31
Convert Doc to PDF


2-1348560334
Сергей
2012-09-25 12:05
2013.03.31
Как преобразовать 32-х битное изображение в 8 битное


15-1355013745
dummy_user
2012-12-09 04:42
2013.03.31
Turbo Pascal. Программы.