AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

HEX Position umschreiben

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

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

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 11: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
 
#2

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 14: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.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 15: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
Benutzerbild von p80286
p80286

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

AW: HEX Position umschreiben

  Alt 29. Jul 2010, 15:48
Hallo Fart,

ich würde es etwas anders machen:
1) Datei öffnen
2) Position suchen
3) neuen Wert schreiben
4) Datei schließen.

also etwa so
Delphi-Quellcode:
buffer[0]:=255;
fs.create(...);
fs.seek(1234);
fs.write(buffer[0],1);
fs.close;
Selbstredend, daß da noch ein wenig Fehlerprüfung rund herum zugehört. Aber Du mußt ja nicht die ganze Datei laden, um ein Byte zu ändern.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:39 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