Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In einer Datei nach bestimmten Hexcode suchen? (https://www.delphipraxis.net/174455-einer-datei-nach-bestimmten-hexcode-suchen.html)

BBoy 23. Apr 2013 13:04

In einer Datei nach bestimmten Hexcode suchen?
 
Wie kann ich in einer Bilddatei nach einem bestimmten Hexcode suchen? Ich brauche die Position der Vorkommens. Ich möchte damit z.B. feststellen ob es sich um eine JPEG Datei handelt (mir ist klar das ginge einfacher, aber ich brauche es so). Also nach FFD8 suchen und dann noch ob 5 Byte weiter JFIF ist und dann noch nach dem ende FFD9 suchen. Das gefundene JPEG soll dann in ein extra Stream geladen und gespeichert werden.

Mavarik 23. Apr 2013 13:10

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Zitat:

Zitat von BBoy (Beitrag 1212549)
Wie kann ich in einer Bilddatei nach einem bestimmten Hexcode suchen? Ich brauche die Position der Vorkommens. Ich möchte damit z.B. feststellen ob es sich um eine JPEG Datei handelt (mir ist klar das ginge einfacher, aber ich brauche es so). Also nach FFD8 suchen und dann noch ob 5 Byte weiter JFIF ist und dann noch nach dem ende FFD9 suchen. Das gefundene JPEG soll dann in ein extra Stream geladen und gespeichert werden.

Mach Dir ein Array of Byte
Lade dir die 1. X Bytes rein und dann einfach testen...

Wo ist Dein Problem? Etwas genauer und wir können Dir besser antworten.

Mavarik

Klaus01 23. Apr 2013 13:15

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Hallo,

mit TFileStream die Datei öffnen.

TFileStream.readbuffer anschauen.

Nachdem ersten Auftreten von $FF suchen,
wenn gefunden dann schauen ob das nächste Zeichen $D8 ist.
Wenn ja, hast Du Deinen Anfang gefunden.

Mit TFileStream.seek(5, soFromCurrent) springt der Positionszeiger 5 Zeichen weiter.

In der Regel steht im jpg auch irgendwo die Größe drinnen.
Das auszulesen ist vielleicht einfacher als die gesamte Datei zu scannen.

Grüße
Klaus

Bummi 23. Apr 2013 13:23

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Delphi-Quellcode:
uses strUtils;
procedure TForm3.Button1Click(Sender: TObject);
var
  MS: TmemoryStream;
  p1: Cardinal;
  Search : AnsiString;
begin
  // !! Positionen nicht 0 - basiert
  if OpenDialog1.Execute then
  begin
    MS := TmemoryStream.Create;
    try
      MS.LoadFromFile(OpenDialog1.FileName);
      SetString(Search,PansiChar(MS.Memory),MS.Size);
      p1 := Pos(#$FF#$D8, Search);
      ListBox1.Items.Add(Format('Pos FFD8 %d', [p1]));
      p1 := PosEx(AnsiString('JFIF'), Search, p1);
      ListBox1.Items.Add(Format('Pos JFIF %d', [p1]));
      p1 := PosEx(AnsiString(#$FF#$D9), Search, p1);
      ListBox1.Items.Add(Format('Pos FFD9 %d', [p1]));
    finally
      MS.Free;
    end;

  end;
end;

BBoy 23. Apr 2013 13:35

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Danke Bummi für den Code.

Komischerweise findet er das vorkommen nicht, obwohl es vorhanden ist. Auch der Versuch den Memory im memo anzuzeigen (zum testen) geht nicht. Es wird nix angezeigt.

Delphi-Quellcode:
procedure TForm1.BtnCut3Click(Sender: TObject);
var
 MS:TmemoryStream;
 p1:Cardinal;
begin
    // !! Positionen nicht 0 - basiert
         MS := TMemoryStream.Create;
         try
           MS.LoadFromFile('.\temp\3.jpg');
           p1 := Pos(#$FF#$D8,AnsiString(MS.Memory)) ;
           rzmemo4.Text := ansistring(ms.Memory);
           ListBox1.Items.Add(Format('Pos FFD8 %d',[p1]) );
           p1 := PosEx( AnsiString('JFIF'),AnsiString(MS.Memory),p1);
           ListBox1.Items.Add(Format('Pos JFIF %d',[p1]) );
           p1 := PosEx(#$FF#$D9,AnsiString(MS.Memory),p1);
           ListBox1.Items.Add(Format('Pos FFD9 %d',[p1]) );
         finally
           MS.Free;
         end;


end;
Ist der Inhalt von Memory überhaupt schon HEX? Oder eher die "ÿØÿà JFIF  `" Zeichen?

Mavarik 23. Apr 2013 13:36

AW: In einer Datei nach bestimmten Hexcode suchen?
 
hmm OK... ich dachte "vorkauen" gilt nicht...

Mavarik

BBoy 23. Apr 2013 13:55

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Wenn ich auch nur ansatzweise gewusst hätte wie das geht, hätte ich nicht gefragt. Daher finde ich so aussagekräftige Antworten wie von Bummi hilfreich. Ich habe zwar vorher schon verschiedene Routinen ausprobiert aber die hatten in etwa das selbe Problem wie die von Bummi. Habe das an mehreren JPG ausprobiert. Weiß echt nicht warum das nicht funktioniert :?:

Bummi 23. Apr 2013 14:08

AW: In einer Datei nach bestimmten Hexcode suchen?
 
@BBoy sorry, ich hatte einen Fehler im Gedächtnisprotokoll :oops: , angepasst ...

p80286 23. Apr 2013 14:36

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Zitat:

Zitat von BBoy (Beitrag 1212556)
Ist der Inhalt von Memory überhaupt schon HEX? Oder eher die "ÿØÿà JFIF  `" Zeichen?

Das kommt ganz darauf an wie Du es darstellst, bzw. interpretierst. Im Prinzip enthält jede Speicherstelle (Byte) einen Wert zwischen 0 und 255.

Mir gefällt Bummis Lösung auch, trotzdem sind die Anregungen von Klaus und Maverik weder falsch noch zu kurz gegriffen. Meiner Meinung nach die notwendige Vorstufe um Bummis Lösung zu begreifen, aber nun gut....

Gruß
K-H

BBoy 23. Apr 2013 14:51

AW: In einer Datei nach bestimmten Hexcode suchen?
 
Danke Bummi!! Endlich eine Routine dieser Art die auch funktioniert.

Zitat:

Zitat von p80286 (Beitrag 1212571)
Mir gefällt Bummis Lösung auch, trotzdem sind die Anregungen von Klaus und Maverik weder falsch noch zu kurz gegriffen. Meiner Meinung nach die notwendige Vorstufe um Bummis Lösung zu begreifen, aber nun gut....
Gruß
K-H

Ich hatte auch schon einiges in der Richtung versucht aber keine Routine hatte etwas gefunden, genau wie bei bummis erster Version. Daher dachte ich wäre auf dem total falschen weg. Mit Streams, Setstring usw habe ich noch nie gearbeitet. Nun weiß ich wie es geht und bin froh das mir hier geholfen wurde.... wie schon so oft :) Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 1 von 2  1 2      

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