AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HEX Position umschreiben

Ein Thema von F.Art · begonnen am 28. Jul 2010 · letzter Beitrag vom 29. Jul 2010
Antwort Antwort
Seite 1 von 2  1 2      
F.Art

Registriert seit: 12. Jan 2003
26 Beiträge
 
Delphi 7 Enterprise
 
#1

HEX Position umschreiben

  Alt 28. Jul 2010, 02:35
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?
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: HEX Position umschreiben

  Alt 28. Jul 2010, 04:01
Wenn du nach "HEX" hier im Forum suchst, findest du jede Menge Themen darüber.
http://www.delphipraxis.net/123574-i...speichern.html
http://www.delphipraxis.net/55161-he...schreiben.html
http://www.delphipraxis.net/108318-d...-ausgeben.html
usw.
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
F.Art

Registriert seit: 12. Jan 2003
26 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: HEX Position umschreiben

  Alt 28. Jul 2010, 12:44
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:
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;
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.

Geändert von F.Art (28. Jul 2010 um 13:12 Uhr)
  Mit Zitat antworten Zitat
Klaus01

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

AW: HEX Position umschreiben

  Alt 28. Jul 2010, 15:43
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‘
Hallo,

du kannst Dir ein TMemo auf das Formular legen
und es Display nennen.
Dann dürfte der Fehler verschwinden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: HEX Position umschreiben

  Alt 28. Jul 2010, 15:49
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.
Wenn du einen TFileStream nimmst, dann dürfen die Dateien SEHR groß werden (> 3 GB). Bei der Verwendung eines TMemoryStreams bist du an die 2GB-Marke gebunden.

Bernhard

PS: Positionen steuert man sinnvollerweise mit .Position an.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
F.Art

Registriert seit: 12. Jan 2003
26 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: HEX Position umschreiben

  Alt 28. Jul 2010, 22:42
[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.


Wenn du einen TFileStream nimmst, dann dürfen die Dateien SEHR groß werden (> 3 GB). Bei der Verwendung eines TMemoryStreams bist du an die 2GB-Marke gebunden.

Bernhard

PS: Positionen steuert man sinnvollerweise mit .Position an.
also 2gb reicht mir voll und ganz.

also mit
datei.Position:=$AED3; kann ich anscheind auf die possition springen, nun möchte ich genau diesen wert durch 3F zb ersetzen, wie mache ich das?

Geändert von F.Art (29. Jul 2010 um 01:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 08:02
das funktionierte nicht, habe es aber ans laufen bekommen.
procedure Display(const S: string); einfach bey types reingeschmissen.
Es liegt einfach daran, dass du es hier mit OOP zu tun hast. Heißt: Alles was du unterhalb von implementation an dein Objekt gebunden hast, muss auch oberhalb so sein und anders herum. Du musst also diese eine rot markierte Zeile in die Deklaration deines Objektes kopieren und den Objektnamen samt Punkt wieder aus der kopierten Zeile rausschmeißen.

nun möchte ich genau diesen wert durch 3F zb ersetzen, wie mache ich das?
Jetzt kommt es darauf an, wie viele Bytes du ersetzen willst. Für 1 Byte kannst du Byte als Datentyp verwenden, 2 Bytes -> Word, 4 Bytes: Integer/Cardinal. Dann musst du in deine Variable (Zahl) deine Zahl reinschreiben. Mit Hilfe von .Write kannst du dann schreiben. .Read ist das äquivalent fürs lesen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
F.Art

Registriert seit: 12. Jan 2003
26 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 12:47
Delphi-Quellcode:
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;
dies wäre nun meine lösung.
würde mir jemand dies nun noch optimieren und vereinfachen soweit es möglich ist?
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#9

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 15:38
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: procedure WriteHEX(fs: TStream; ... . 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.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#10

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 16:13
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...
  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 11:52 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