AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeiger auf eine Bytefolge im Stream - wie ?
Thema durchsuchen
Ansicht
Themen-Optionen

Zeiger auf eine Bytefolge im Stream - wie ?

Ein Thema von tomsson74 · begonnen am 25. Jun 2008 · letzter Beitrag vom 25. Jun 2008
Antwort Antwort
tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#1

Zeiger auf eine Bytefolge im Stream - wie ?

  Alt 25. Jun 2008, 14:40
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Zeiger auf eine Bytefolge im Stream - wie ?

  Alt 25. Jun 2008, 15:05
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zeiger auf eine Bytefolge im Stream - wie ?

  Alt 25. Jun 2008, 15:14
Demnach wäre mein Lösungsansatz mit dem ReadString garnicht so verkehrt ...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Zeiger auf eine Bytefolge im Stream - wie ?

  Alt 25. Jun 2008, 17:26
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


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:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz