![]() |
HEX Position umschreiben
Derzeit benutze ich einen HEX Editor um eine bestimmte Possition in einer Datei (Spielstand) um zu schreiben. Nur möchte ich dies nicht immer von Hand erledigen. Daher würde ich gerne ein Delphi Projekt machen, was diese Possition ermittelt und um schreibt.
Wie stelle ich das nun an? |
AW: HEX Position umschreiben
Wenn du nach "HEX" hier im Forum suchst, findest du jede Menge Themen darüber.
![]() ![]() ![]() usw. |
AW: HEX Position umschreiben
Der dritte Link "Datei inhalt als HEX-String ausgeben..."
Interessiert mich, nur wenn ich das beispiel benutze bekomme ich eine Fehlermeldung. procedure TForm1.Display(const S: string); Undefinierter Bezeichner: ‚Display‘ --------------------------
Delphi-Quellcode:
mich würde noch interessieren wie groß eine datei sein darf um sie so einladen zu können in den speicher? und ich dachte mir das ich in dem memorystream nun die possition abändere und wieder speicher. nur habe ich noch keine idee wie ich die possition ansteuern lasse und ändere.
procedure TForm1.Button1Click(Sender: TObject);
var datei: TMemoryStream; begin if FileExists('at') then begin datei := TMemoryStream.Create; try datei.LoadFromfile('at'); finally datei.SaveToFile('at2') end; datei.Free end; end; |
AW: HEX Position umschreiben
Zitat:
du kannst Dir ein TMemo auf das Formular legen und es Display nennen. Dann dürfte der Fehler verschwinden. Grüße Klaus |
AW: HEX Position umschreiben
Zitat:
Bernhard PS: Positionen steuert man sinnvollerweise mit .Position an. |
AW: HEX Position umschreiben
[QUOTE=Klaus01;1038129
Hallo, du kannst Dir ein TMemo auf das Formular legen und es Display nennen. Dann dürfte der Fehler verschwinden. Grüße Klaus[/QUOTE] das funktionierte nicht, habe es aber ans laufen bekommen. procedure Display(const S: string); einfach bey types reingeschmissen. Zitat:
also mit
Delphi-Quellcode:
kann ich anscheind auf die possition springen, nun möchte ich genau diesen wert durch 3F zb ersetzen, wie mache ich das?
datei.Position:=$AED3;
|
AW: HEX Position umschreiben
Zitat:
Zitat:
Bernhard |
AW: HEX Position umschreiben
Delphi-Quellcode:
dies wäre nun meine lösung.
procedure WriteHEX(fs: TMemoryStream; hexpos: string; hex: string);
var buf: array of byte; i: integer; begin fs.Position:=StrToInt('$'+hexpos); SetLength(buf, Length(hex) shr 1); for i := Low(buf) to high(buf) do buf[i] := StrToInt('$' + Copy(hex, Succ(i shl 1), 2)); fs.Write(buf[0], Length(buf)); end; procedure TForm1.Button1Click(Sender: TObject); begin if FileExists('at') then begin datei := TMemoryStream.Create; try datei.LoadFromfile('at'); finally WriteHex(Datei, 'AED6', 'FF'); datei.SaveToFile('at2'); end; datei.Free end; end; würde mir jemand dies nun noch optimieren und vereinfachen soweit es möglich ist? |
AW: HEX Position umschreiben
Da alle Streams in Delphi auf TStream aufbauen, würde ich die Prozedur nicht auf TMemoryStream beschränken, sondern es offen lassen, welche Art von Stream verwendet werden darf. Heißt:
Delphi-Quellcode:
. Außerdem würde ich die Prozedur nicht mit Stringwerten befüllen, sondern dafür echte Zahlen nehmen. HEX-Konstanten werden ja auch als Zahl übergeben.
procedure WriteHEX(fs: TStream; ...
Bernhard |
AW: HEX Position umschreiben
Wird der Rückgabewert von Write nicht auswertet, statt dessen WriteBuffer verwenden.
Dann wird im Fehlerfall zumindest eine Exception ausgelöst. Bitte rück mal den Code auch ordentlich ein, erstens ist es verständlicher und man findet eventuelle Fehler auch einfacher... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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