Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизКак учесть выравнивание в записи при переносе даных? Найти похожие ветки
← →
Erik1 © (2005-05-20 17:05) [0]Собственно говоря мне надо переместить первых два поля записи в Integer.
RElement = record
State: TState;
TableID: TEnumTables;
ID, Parent_ID: TID;
TyypID: TID;
...
End;
Разумеется хочется седать красиво.
Var
Buf: Integer;
Begin
Move(Element, Buf, SizeOf(State)+SizeOf(TableID));
А при востановлении Move(Buf, Element, SizeOf(State)+SizeOf(TableID));
Но я чтото неуверен, небудет ошибок за счет выравнования?
← →
REA (2005-05-20 17:16) [1]Вариант 1: packed record
Вариант 2:
TStateID = Record
State: TState;
TableID: TEnumTables;
End; и :=
← →
Alexander Panov © (2005-05-20 17:20) [2]Move(Element, Buf, SizeOf(TState)+SizeOf(TEnumTables));
При условии, что TState и TEnumTables - не динамические массивы +
[1] REA (20.05.05 17:16)
Вариант 1: packed record
← →
Erik1 © (2005-05-20 17:44) [3]TEnumTables = (enumTeenused, enumSeadmed, enumLeping);
TState = (stNone, stDelete, stInsert, stModify, stReInit, stError, stInit);
Так, что они прекрасно должны поместится в Integer и SizeOf(State) = SizeOf(TState) это верно для всех простых типов.
К сожалению packed record нехотелось использовать, поэтому и задал вопрос по возможности отслеживания выравнивания. Например можно перенести два поля по очереди
Var
Ptr: Pointer;
begin
Move(Element.State, Buf, SeofOf(Element.State))
Ptr := @Buf;
Inc(Integer(Ptr), SizeOf(Element.State));
Move(Element.TableID, Ptr^, SizeOf(Element.State)+SizeOf(Element.TableID));
Но это неверное не единственвый вариант?
← →
Игорь Шевченко © (2005-05-20 17:45) [4]$Z + F1
← →
Erik1 © (2005-05-20 17:45) [5]Конечно SizeOf(Element.State) это лишнее.
← →
Erik1 © (2005-05-20 17:50) [6]to Игорь Шевченко
А может быть при $Z1 перечисляемые типы будут еще идти без выравнивания? И я вобще зря волнуюсь?
← →
Игорь Шевченко © (2005-05-20 17:51) [7]Erik1 © (20.05.05 17:50) [6]
> А может быть при $Z1 перечисляемые типы будут еще идти без
> выравнивания?
Практика - критерий истины. Может быть. В случае packed record - совершенно точно без выравнивания.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c