AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi In einer Datei nach bestimmten Hexcode suchen?
Thema durchsuchen
Ansicht
Themen-Optionen

In einer Datei nach bestimmten Hexcode suchen?

Ein Thema von BBoy · begonnen am 23. Apr 2013 · letzter Beitrag vom 24. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:10
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:15
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:23
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (23. Apr 2013 um 14:07 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:35
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?

Geändert von BBoy (23. Apr 2013 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:36
hmm OK... ich dachte "vorkauen" gilt nicht...

Mavarik

Geändert von Mavarik (23. Apr 2013 um 14:53 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 13:55
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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 14:08
@BBoy sorry, ich hatte einen Fehler im Gedächtnisprotokoll , angepasst ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 14:36
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#10

AW: In einer Datei nach bestimmten Hexcode suchen?

  Alt 23. Apr 2013, 14:51
Danke Bummi!! Endlich eine Routine dieser Art die auch funktioniert.

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!
  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 21:57 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