Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.108 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Padding Bytes herausfinden

  Alt 6. Feb 2019, 10:46
Kurz mal die RTTI bemüht:
(…)
Kleiner Nachtrag: Hierbei wird der Fall vergessen wenn das letzte Feld im Record noch Padding hat. Nach der for -Schleife muss man noch einmal den Wert von offset mit t.TypeSize vergleichen. Die Differenz davon sind die letzten Padding-Bytes.


Mein "fillPaddingBytes" sähe dann so aus:

Delphi-Quellcode:
procedure TMyStructHelper.fillPaddingBytes(const pattern: Byte);
var
   ctx: TRttiContext;
   rttiType: TRttiType;
   field: TRttiField;
   offset: Integer;
   rawMemory: PByte;
   index: NativeInt;
begin
   rttiType := ctx.GetType( TypeInfo(TMyStruct) );
   offset := 0;
   rawMemory := @self;
   for field in rttiType.GetFields() do
      begin
         case field.offset - offset of
            0: ;
            1: rawMemory[offset] := pattern;
         else
            for index := offset to Pred(field.Offset) do
               rawMemory[index] := pattern;
         end;
         offset := field.offset + field.FieldType.TypeSize;
      end;

   for index := offset to Pred(rttiType.TypeSize) do
      rawMemory[index] := pattern;
end;
  Mit Zitat antworten Zitat