Edytowanie HEX w Delphi

0

Mam małe pytanko: jak w Delphi edytować plik hexadecymalnie?

Tzn: Mam plik i muszę pod offset np. 0x00A0 zapisać FF

Jak to zrobić w Delphi ??

0

seek, write/blockwrite + F1

0
var 
  f:file;
  b:byte;
begin
  assignfile(f,'[ścieżka\]nazwpliku');
  reset(f,1);
  seek(f,$a0);
  b:=$ff;
  blockwrite(f,b,1);
  closefile(f);
end.

// ciekaw jestem, co będzie dalej... blokada, czy usuwanie. heh
// mordobicie [boks] - ŁF
// Kulltury modelarzu :-P

  • Ooooo Ty.... user image - ŁF

  • user image ;p

  • oj, bo się doigrasz user image - ŁF

  • waiting hehe user image

  • uważaj, do kogo rozmawiasz... user image - ŁF

  • user image oj bo cię spotka nagły zgniłek.

  • nas? bohaterów? pomidorami? user image a nieładnie, nieładnie - ŁF

0

Dzięki mądre głowy!
A teraz: stworzyłem procedurkę

procedure ZapiszDoPliku(var plik:string; offset,wartosc: byte );
{ Procka pobiera PLIK(nazwapliku) OFFSET i WARTOSC do zapisania pod niego }
{ Dzialanie: zapis do PLIKu WARTOSCi pod dany OFFSET}

 var
  f:file;
  b:byte;
 begin
   assignfile(f, plik);
   reset(f,1);
   seek(f,offset);
   b:=wartosc;
   blockwrite(f,b,1);
   closefile(f);
 end;

i jak ją wywołuje: ZapiszDoPliku(Edit1.Text, Edit2.Text, Edit3.Text);
to wywala mi błąd konwersji string --> binary

Jaką instrukcją to zkonwertować??
StrToBin ??

0

ZapiszDoPliku(Edit1.Text, Edit2.Text, Edit3.Text);

ZapiszDoPliku(Edit1.Text, StrToInt(Edit2.Text), StrToInt(Edit3.Text));
wystarczy

[<font color="blue">DOPISANE</span>]
ups sorry ale o tym nie pomyslalem [wstyd]

0

ZapiszDoPliku(Edit1.Text, Edit2.Text, Edit3.Text);

ZapiszDoPliku(Edit1.Text, StrToInt(Edit2.Text), StrToInt(Edit3.Text));
wystarczy

A jeśli jako Edit2 mam np. A0FF a Edit3 FA to nie wywali bledu i skonvertuje to?

0

Zmień offset przede wszystkim na dword. A w strtoint...

StrToInt('$'+Edit2.Text).

Z poprzedniego postu powinieneś się domysleć, że znaczek dolara oznacza zapis hex.

0

Zmień offset przede wszystkim na dword. S w strtoint...

StrToInt('$'+Edit2.Text).

Z poprzedniego postu powinieneś się domysleć, że znaczek dolara oznacza zapis hex.

Hehe domyslilem sie :_)
PS: Ale po wpisaniu offsetu np. 04DF z dolarem ($0DF) to wyskakhuje mi blad cytat
[Error] glownyUnit.pas(105): Constant expression violates subrange bounds

0

[Error] glownyUnit.pas(105): Constant expression violates subrange bounds

Właśnie dlatego flabra ci napisał żebys zmienił offset na typ DWORD bo Byte ma zakres tylko do $FF

0

To znowu ja...
Dzięki za dotychczasową pomoc.

Mam jeszcze jedno pytanko: jak zmodyfikować kod tak, aby jeśli np. Edit1.Text jest równy 65535 to zapisuje FF pod OFFSETEM np. A0 i SĄSIEDNIM ??

0
procedure ZapiszDoPliku(plik:string;offset:longint;var buf;size:longint);
var f:file;
begin
  assignfile(f, plik);
  reset(f,1);
  seek(f,offset);
  blockwrite(f,buf,size);
  closefile(f);
end;

EOT. Help jest pod f1, nikt za ciebie nie napisze programu.

// Sorry seek i blockwrite akceptują longinta (wg. helpa), choć dword byłby bardziej logiczny.
// Co wcale nie znaczy, że z dwordem nie będą poprawnie chodzić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1