AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

Ein Thema von ObeY · begonnen am 16. Nov 2013 · letzter Beitrag vom 25. Nov 2013
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.752 Beiträge
 
Delphi 12 Athens
 
#1

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 16. Nov 2013, 14:09
Ein dynamisches Array ist intern ein Pointer auf das Array. Deswegen geht das nicht:

floFStream.ReadBuffer(b,l); // Exception: Stream-Read-Fehler.

weil du damit den Pointer überschreibst, aber das geht:

floFStream.ReadBuffer(b[0],l);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
ObeY

Registriert seit: 3. Jun 2004
7 Beiträge
 
Delphi 5 Enterprise
 
#2

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 16. Nov 2013, 15:24
Ah es geht! Hurra!

Man kann also mit dem Low Index eines Arrays das gesamte Array füllen?
Als ich deine Antwort gesehen habe, dachte ich zuerst es würde nur ein Byte in das Array geschrieben werden.

Vielen Dank für deine Antwort! Das bring mich richtig weiter in meinem Programm.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.542 Beiträge
 
Delphi 12 Athens
 
#3

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 16. Nov 2013, 15:46
Ein Array besteht aus einem Zeiger/Pointer auf seine Daten.

Und da liegen ab dem ersten Feld alle Felder direkt hintereinander und vor dem ersten Eintrag versteckt sich ein Integer für die Arraygröße.


Also ja.


Statt dem Array kannst du auch einen TMemoryStream verwenden, bzw. eeinen TByteStream (in aktuelleren Delphis), wo du die Daten via TStream.CopyFrom vom TFileStream kopieren, aber dennoch über einen Pointer drauf zugreifen könntest.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Nov 2013 um 15:50 Uhr)
  Mit Zitat antworten Zitat
ObeY

Registriert seit: 3. Jun 2004
7 Beiträge
 
Delphi 5 Enterprise
 
#4

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 16. Nov 2013, 16:00
danke für die Erklärungen. Jetzt weiß ich nicht nur wie es funktioniert sondern auch warum
Thomas
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 18. Nov 2013, 11:48
Rein aus Interesse:
Wenn ich das richtig verstanden habe, dann müsste auch
floFStream.ReadBuffer(Pointer(b)^,l);
gehen, oder liege ich da falsch?
Falls noch jemand die Geduld hat mir diese Fragen zu beantworten : Was ist dann der Unterschied wenn das Feld b statisch ist? D.h. was passiert bei einem Zugriff á la
floFStream.ReadBuffer(b,l); ?


Grüße!
Chris
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.542 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 18. Nov 2013, 13:11
Jupp, das mit dem Pointer ginge praktisch auch.

Aber wenn du über das feld gehst, dann ist es egal, ob es eine dynamisches oder statisches Array ist.
> unterschiedliche Typen, aber gleicher/einheitlicher Code

Beim dynamischen Array muß man nur bei Einwas aufpassen.
Wenn die Bereichsprüfung aktiv ist und man greift auf das Feld 0 eines leeren Arrays zu, dann kommt rein rechnerisch immernoch NIL raus, aber die Bereichsprüfung knallt da, weil es das feld 0 natürlich nicht gibt.



Ein statisches Array ist praktisch wie ein Record, in dem alle Felder hintereinander stehen.
Also ohne den Pointer und ohne die Längen-Info vor den Daten. Die Längen-Info steht da dann ja in der RTTI.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Dynamische Arrays vom Type Byte in Verbindung mit TFileStream

  Alt 25. Nov 2013, 09:16
Dankeschön
Chris
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:39 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