Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1354659174
Sinoptik2013
2012-12-05 02:12
2013.03.31
Информер погоды на рабочий стол


2-1347384231
Писатель
2012-09-11 21:23
2013.03.31
Масштабирование BMP


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


2-1348238497
n_sch
2012-09-21 18:41
2013.03.31
Выборка данных из файла


15-1354614958
boriskb
2012-12-04 13:55
2013.03.31
Реклама





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский