AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anfänger Frage zu Byteweisem auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Anfänger Frage zu Byteweisem auslesen

Ein Thema von dragi · begonnen am 3. Apr 2005 · letzter Beitrag vom 4. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#1

Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 02:19
Hallo,

ich hab Probleme die ganzen Bespiele mit dem auslesen von Binärdateien zu verstehen. Also, die Datei lese ich in einen Stream ein. Aber wie navigiere ich jetzt darin? Ich hab eine Beschreibung wie die Datei aufgebaut ist darin steht z.B. das die ersten 4Byte ein Plaintext sind, die nächten 4 Byte sind ein Int und dann folgen diverse stellen die 1 Byte sind. Wenn ich jetzt z.B das Integer haben möchte, wie navigiere ich jetzt genau an die Stelle und hole mir genau diese 4Byte?
Kann mir das nochmal jemand erklären?

Vielen Dank

Dragi ...der hofft das mal zu verstehen
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 02:28
Hai dragi,

in einem Stream kannst Du deine "Position" mit TStream.Posion := xxx setzen.
Um jetzt etas aus dem Strem zu lesen kannst Du mir ja mal Delphi-Referenz durchsuchen.ReadBuffer ansehen.

So könnte das dann aussehen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  myStream : TStream;
  i : Integer;
begin
  myStream.Position := 3; // Auf das 4. Byte setzen.
  myStream.ReadBuffer(i , SizeOf (i)); // In "i" lesen.
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#3

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 02:31
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  FS: TStream;
  i: Integer;
begin
  FS := TFileStream.Create('datei.dat', fmOpenRead);
  try
    FS.Position := 3;
    FS.ReadBuffer(i, 4);
  finally
    FS.Free;
  end;
end;
Edit: Hm, zu lahm
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 02:50
Hol dir erstmal die Dateigröße, denn die benötigst du zum Auslesen der Datei.
Anschließend kannst du die Datei gepuffert auslesen.
  Mit Zitat antworten Zitat
dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 14:43
@bigg

warum muss ich denn die Dateigrösse haben? Ich hab eine Aufstellung in der nacheinander Beschreiben ist wie die Datei aufgebaut ist in Byte. Also: 4Byte Key, 4Byte Int, 1Byte Byte, 1Byte BYte, 4Byte Int, ... etc. Muss ich dann trotzdem die gesamtgrösse haben?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 14:45
die gesammtgröße brauchst du nicht wirklich, höchstens um abzuprüfen ob die datei wirklich groß genug ist und du nicht übers dateiende hinaus liest
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 19:34
Hallo,

ich habe es jetzt hinbekommen, aber ein kleines Problem habe ich noch. Kann es sein das der noemale PC/Delphi alles als little Endian speichert? Also Integer und so?

Wenn ich jetzt

Code:
  FS.ReadBuffer(i, 4);
mache erhalte ich zwar einen Wert aber ich müsste eigentlich den Binärwert der 4 Bytes umkehren?! Ich weiss genau das an einer bestimmten Stelle der Integer Wert 1 rauskomme müsste, ich erhalte aber 16777216 was in Binärere Schreibweise 1000000000000000000000000 gibt. Wenn ich das jetzt umkehre habe ich genau 1. Alles Integer Werte haben so komische Ergebnisse obwohl ich an der richtigen Stelle auslese. Wie kann ich denn jetzt das ausgelesene umkehren?

Vielen Dank

Dragi
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 3. Apr 2005, 20:08
Moin Dragi,

Du könntest die vier Byte einzeln auslesen, und dann in umgekehrter Reihenfolge wieder zusammensetzen, oder Du liest sie in der Reihenfolge aus wie sie in der Datei stehen, und überträgst sie dann entsprechend.

Ein "Trick" wäre es für das Einlesen einen varianten Record zu verwenden:

Delphi-Quellcode:
// nur das Wesentliche, das drumherum fehlt
type
  TcsBigEndian = packed record
    case byte of
      0 : (abRead : array [1..4] of byte;);
      1 : (dwResult : DWORD);
  end;

var
  beWork : TcsBigEndian;

begin
  fs.Read(beWork.abRead[1],4); // in richtiger Reihenfolge gelesen
  ShowMessage(IntToStr(beWork.dwResult));
end;
Ungetestet, müsste aber funktionieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 4. Apr 2005, 13:27
Also entweder hab ich es nciht verstanden oder es funktioniert nicht. Ich bekomme die gleiche falsche Zahl raus

Irgendwie müsste man doch diese 4 Byte in umgekehrter Reihenfolge in den Speicher schreiben und dann diesen Breich auslesen und einem Integer zuweisen. Aber wie macht man sowas???

Gruss

Dragi
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Anfänger Frage zu Byteweisem auslesen

  Alt 4. Apr 2005, 20:02
Moin Dragi,

es funktioniert nicht

Aber so geht's:

Delphi-Quellcode:
    fs.Read(beWork.abRead[4],1);
    fs.Read(beWork.abRead[3],1);
    fs.Read(beWork.abRead[2],1);
    fs.Read(beWork.abRead[1],1);
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:50 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