Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In Datei nach Hex Bytefolge suchen und ändern! Hilfe! (https://www.delphipraxis.net/10680-datei-nach-hex-bytefolge-suchen-und-aendern-hilfe.html)

unitedlb 23. Okt 2003 11:20


In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
Hallo!

Wer kann mir folgende Anweisung nach Delphi übersetzen?

a) Lade die ersten 16 KB der Datei in einen Puffer
b) durchsuche den Puffer nach der Bytefolge 0x02 0x40 0x23
c) wenn gefunden,
- seeke an die Position des 0x23-Bytes
- überschreibe das Byte mit 0x33
- schließe File


Vielen Dank.

unitedlb 24. Okt 2003 11:35

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
...

Phoenix 24. Okt 2003 11:48

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
Das ist so genau beschrieben, das solltest Du mit Hilfe eines (File)-Streams selber hinbekommen.

unitedlb 24. Okt 2003 18:07

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
...

Christian Seehase 24. Okt 2003 18:10

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
Moin Unitedlb,

mit ... kann hier mit Sicherheit keiner was anfangen.
Der Tip von Phoenix sollte Dir zumindest schon mal einen Einstieg in die Problemlösung gebracht haben.
Wenn Du nun Probleme mit der Anwendung von TFileStream hast wäre es ganz hilfreich, wenn Du mal sagst, wo's hakt.

unitedlb 24. Okt 2003 18:19

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
ich bin etwas verwirrt:
anscheinend gibt es hier sehr viele leute die sich gut auskennen und die diese paar zeilen code in 5 minuten hinschreiben könnten, dennoch wird anscheinend großen wert darauf gelegt das ich selber lerne wie das genau funktioniert.

wird es akzeptiert wenn ich das gar nicht lernen möchte sondern nur copy-pasten?

ich arbeite nicht an einem großen projekt sondern möchte lediglich mini-tool haben mit dem ich mpeg2 files patchen kann.

vielen dank.

himitsu 24. Okt 2003 18:42

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
Hi Sebastian,
Zitat:

Gibt es wirklich Programmierhelden?
Nö.
Willst wohl einer werden. Wieviele Tastaturen jagst'n so monatlich übern Jordan?


Delphi-Quellcode:
{© by Himitsu @ Delphi-PRAXiS}

Procedure TForm1.Button1Click(Sender: TObject);
  Const Groesse = 16384; {16 KB |  1 KByte = 1024 Byte}

  Var FS: TFileStream;
    Buffer: Array[0..Groesse-1] of Byte;
    I: Integer;
    B: Byte;

  Begin
    Try
      {Datei öffnen}
      FS := TFileStream.Create('Datei.dat', fmOpenReadWrite);
      {Daten einlesen}
      FS.Read(Buffer, Groesse);
      {Bytefolge suchen}
      For I := 0 to Groesse - 3 do
        If (Buffer[I] = $02) and
          (Buffer[I + 1] = $40) and
          (Buffer[I + 2] = $23) Then Begin
          {springe (seeke) zu 0x23}
          FS.Seek(I + 2, soFromBeginning);
          {überschreibe 0x23 mit 0x33}
          B := $33;
          FS.Write(B, 1);
        End;
      FS.Free;
    Except
      On EFOpenError do ShowMessage('Datei konnte nicht geöffnet werden');
      Else ShowMessage('Unbekannter Fehler');
    End;
  End;
Naja 5 min hat es nicht gerade gedauert. Hatte aber sowieso gerade angefangen das zu lernen.
Scheinst dich mit MPEG's auszukennen, ich suche noch Infos zu ID3 (vor allem ID3v2 lesen & schreiben)

unitedlb 27. Okt 2003 10:29

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
vielen dank!

womit ich mich ganz gut auskenne ist das monatelange zusammenspiel von h-,s-codec/delphi6/win2k.
das ist eine wissenschaft für sich...

danke für die hilfe!

Uncle Cracker 28. Mai 2004 23:19

Re: In Datei nach Hex Bytefolge suchen und ändern! Hilfe!
 
Gibt es vielleicht noch eine andere Methode nach den Werten zu suchen und nicht

Code:
If (Buffer[I] = $02) and
           (Buffer[I + 1] = $40) and
           (Buffer[I + 2] = $23) Then Begin

Also das ich gleich komplett nach z.B. $020423 und nicht alles einzeln mit "and" verknüpfen. Ich habe das mal in einer Extraschleife probiert, aber leider kann ich das nicht wirklich in die Funktion einbringen, hier mein Test, der auch einzeln funktioniert, aber irgendwie kann ich das nicht einbringen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, x: Integer;
const Werte = '024023159745';
begin
  x := 1;
  For i := 0 to round(length(Werte)/2)-1 do
  begin
    Showmessage(Werte[x]+Werte[x+1]);
    x := x + 2;
  end;
end;
Könnte mir vielleicht jemand helfen, anhand des Beispiels von himitsu bzw. einem eigenem, wie ich nach den Hexwerten suchen kann, die bei mir in "Werte" stehen?


:love: Danke UC


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