Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Typecasting eines Arrays von Byte und Schreiben in verschiedene Variablen in Delp

  Alt 24. Feb 2020, 10:26
Um ganz ehrlich zu sein habe ich das früher auch so gemacht, mir es aber mittlerweile abgewöhnt. Am besten gönnt man sich das Getippe von ein paar Zeilen für die Konvertierung zwischen den rohen Bytes und der Datenstruktur wie man sie in seinem Programm abbilden möchte. Da lässt sich auch wesentlich besser testen und auf Sonderfälle reagieren.
Um bei deinen Beispiel zu bleiben, dann also so wie in p3(); gezeigt?


Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
   System.SysUtils,
   System.Types;

type
   TAppData = packed record
      someInteger: Int32;
      someTimestamp: TDateTime;
      // usw.
   end;
   PAppData = ^TAppData;

const
   data: TBytes =
      [103, 18, 0, 0] // 4711
      +
      [0, 0, 0, 0, 160, 109, 229, 64]; // 2020, 02, 24

procedure p;
var
   appData: TAppData;
begin
   appData := TBitConverter.InTo<TAppData>(data);
end;

procedure p2;
var
   appData2: TAppData;
begin
   appData2 := (PAppData(@data[0]))^;
end;

procedure p3;
var
   appData3: TAppData;
begin
   appData3.someInteger := (PInteger(@data[0]))^;
   appData3.someTimestamp := (PDateTime(@data[4]))^;
end;

begin
  try
    p;
    p2;
    p3;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
  Mit Zitat antworten Zitat