Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeiger auf eine Bytefolge im Stream - wie ? (https://www.delphipraxis.net/116240-zeiger-auf-eine-bytefolge-im-stream-wie.html)

tomsson74 25. Jun 2008 14:40


Zeiger auf eine Bytefolge im Stream - wie ?
 
Hallo,

ich habe da ein vermutlich triviales Problem, doch stehe ich im Moment auf dem Schlauch und komme einfach nicht weiter.

Wie kann ich direkt auf eine bestimmte Position des Streams zugrifen und diese als Zeiger (PChar) an eine Funktion übergeben. Bis jetzt sieht der Code so aus, er funktioniert auch - aber er ist nicht schön.

Delphi-Quellcode:
(...)
var
  AStream : TStringStream;
  AStr    : String;
begin
  (...)
  AStream.Position := 86;
  AStr := AStream.ReadString(6);
  AStr := StrUnpack(@Astr[1],6);
  (...)
Damit übergebe ich die Adresse einer 6 Byte langen Bytefolge an meine Funktion. Geht das irgendwie einfacher ohne den Umweg, den String erstmal in eine temporäre Variable zu kopieren ?

Ich möchte eigentlich nur einen Zeiger auf eine Bytefolge des Streams, die an der Stelle 87 beginnt. AStream muss übrigens kein TStringStream sein - das kann auch TMemoryStream oder sonst was sein. Habe diesen nur gewählt wegen der ReadString-Methode.

Danke im Voraus
Thomas

SirThornberry 25. Jun 2008 15:05

Re: Zeiger auf eine Bytefolge im Stream - wie ?
 
Bei TStream geht es überhaupt nicht denn die Daten können ja irgendwo liegen und müssen nicht im Speicher an einer bestimmten Adresse stehen. Beispielsweise ein FileStream hat seine Daten auf der Festplatte und somit kann man nicht einfach mal einen Pointer auf die Daten holen.

Bei speziellen Streamklassen muss man sich die Implementation der Klasse anschauen um genaueres zu sagen.

tomsson74 25. Jun 2008 15:14

Re: Zeiger auf eine Bytefolge im Stream - wie ?
 
Demnach wäre mein Lösungsansatz mit dem ReadString garnicht so verkehrt ...

Apollonius 25. Jun 2008 17:26

Re: Zeiger auf eine Bytefolge im Stream - wie ?
 
Bei einem TMemoryStream ist es leicht, solange nicht seine Größe verändert wird. - er besitzt ein Property Memory, ein Zeiger, der auf den Anfang des Inhalts zeigt.
Falls du das selbe für einen Filestream brauchst, musst du von Read/WriteFile auf MMFs umsteigen - hier im Forum gibt es eine Implementation von Neutral General.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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