AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Cast Array[0..x] of Byte in TBytes

Ein Thema von schwa226 · begonnen am 29. Jun 2011 · letzter Beitrag vom 30. Jun 2011
 
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Cast Array[0..x] of Byte in TBytes

  Alt 29. Jun 2011, 23:08
Das kann man nicht casten, da es sich um unterschiedliche Datentypen handelt, die auch ein unterschiedliches Speicherlayout haben.
Da muß ich leider widersprechen: Auch wenn es sich im programmtechnischen Sinn um verschiedene Typen handelt (dynamisches vs. statisches Array), so liegen dennoch in beiden Fällen die Daten byteweise hintereinander. Damit haben sie sehr wohl das selbe Speicherlayout.

Durch den Umstand, daß die Write-Methode den Parameter ABuffer als Konstante erwartet, wird vom Compiler nur die Anfangsadresse des Arrays übergeben. Und damit ist es völlig egal, ob es sich dabei um den Beginn eines dynamischen oder eines statischen Arrays handelt.

Ein kleines Beispiel:
Delphi-Quellcode:
procedure Test(const ABuffer: TBytes; ALength: Integer);
var
  n: Integer;
  s: String;
begin
  s:='';
  for n:=0 to ALength-1 do
  begin
    if s<>''
      then s:=s+',';
    s:=s+IntToStr(ABuffer[n]);
  end;
  ShowMessage(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: Integer;
  a: array[0..9] of Byte;
  b: TBytes;
begin
  //dynamisches Array:
  SetLength(b,10);
  for n:=Low(b) to High(b) do
    b[n]:=n;
  Test(b,10);
  //statisches Array:
  for n:=Low(a) to High(a) do
    a[n]:=n;
  Test(TBytes(@a[0]),10); //<- Typecast
end;
Das heißt: Ein Typecast ist sehr wohl möglich. Ob er auch sinnvoll ist, steht auf einem ganz anderen Blatt...
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (29. Jun 2011 um 23:11 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz