Avatar billede jeg_har_windowsxp Nybegynder
27. januar 2002 - 19:50 Der er 3 kommentarer og
1 løsning

Hex

Hvordan kan man open et program i hex kode og gemme det igen.
Avatar billede jeg_har_windowsxp Nybegynder
28. januar 2002 - 15:46 #2
Jeg vil gerne lave et hex program i delphi.
Avatar billede pc2u.dk Nybegynder
01. februar 2002 - 20:11 #3
du kan downloade en masse inde på download.com vis du søger efter "hex"
Avatar billede delphi Nybegynder
04. februar 2002 - 05:53 #4
Jeg sad lige og så SuperBall og mente så at det ville være passende at overflade et eller andet tilfældigt spørgsmål fra eksperten i min indbakke.  Det her blev så offeret....

På dette link ligger koden til et lille demo program:
http://home1.inet.tele.dk/nip/temp/HexFileStream.zip


Kort fortalt, så går det ud på at jeg sub-classer, dvs laver/nedarver en ny class fra en anden eksisterende class, TFileStream.  Dette gør jeg ved at oprette følgende class:

type
  THexFileStream = class(TFileStream)
  public
    { Public declarations }
    Function ReadAsHexStr(Var Buf: String; Count : Longint): Longint;
    Function WriteAsHexStr(Buf : String): Longint;
  end;

Som det ses laver jeg to nye public metoder, der kan henholdsvis læse og skrive en streng, på hexformat, til og fra en FileStream - dvs. en hvilken som helst disk fil.

De to metoder er implementeret som:

function THexFileStream.ReadAsHexStr(var Buf: String; Count: Integer): Longint;
Var
  ByteArr : PByteArray;
  t      : LongInt;
begin
  Buf := '';

  GetMem(ByteArr, Count);
  Try
    Result := Read(ByteArr^, Count);    // TFileStream.Read()

    For t := 0 To Result-1 Do
      Buf := Buf + IntToHex(ByteArr[t], 2);
  Finally
    FreeMem(ByteArr);
  End
end;

function THexFileStream.WriteAsHexStr(Buf : String): Longint;
Var
  ByteArr : PByteArray;
  t      : LongInt;
begin
  t := 0;
  GetMem(ByteArr, (Length(Buf) Div 2)+1);
  Try
    While Length(Buf)>0 Do
      Begin
        ByteArr[t] := StrToInt('$' + Copy(Buf, 1, 2));
        Delete(Buf, 1, 2);
        Inc(t);
      End;

    Write(ByteArr^, t);                    // TFileStream.Write()
  Finally
    FreeMem(ByteArr);
  End;
end;

Bemærk, at jeg forventer at en hex-streng består ren hex-cifre og at jeg ikke gør noget specielt for at formatere hexstrengene.  Hermed mener jeg, at jeg ikke tager højde for, at strengene kan indeholde mellemrum, '$'-tegn eller '0x'-tegn.
Dvs:  en hexstreng, der skal symbolisere strengen 'ABC', skal altså indeholde '414243'.
Det er en smal sag, at fjerne alle uønskede tegn, fx. fjernes mellemrum med linien:
  While Pos(' ', Buf)<>0 Do Delete(Buf, Pos(' ', Buf), 1);

Zip-filen, der hentes via ovenstående link, indeholder source til en primitiv hex-editor, der, med en form indeholdede et memofelt og andre visuelle controls, viser hvoledes man kan bruge stream classen.

Med venlig hilsen
Peter
- og nu går jeg i seng!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester