Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Quellcode des Programms in Delphi übersetzen - Hilfe gesucht (https://www.delphipraxis.net/57926-quellcode-des-programms-delphi-uebersetzen-hilfe-gesucht.html)

tigerman33 29. Nov 2005 20:51

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Mit dem Dollarzeichen kannst du genau das erreichen was du willst.
Nach der Zuweisung a := $10 steht dann in a der Wert 16 (nämlich genau hexadezimal 10) :)

//edit:
Beitrag umformuliert. Puh, hatte ich eine Grütze geschrieben... :pale:

KSebi 30. Nov 2005 15:37

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Ok vielen Dank!

Habe jetzt Frage 1 auch schon rausgefunden und danke für das $ für Hex ^^

So ich probiers jetzt nochma aus :D

Vielen Dank für alle Antworten.

cöö

KSebi 30. Nov 2005 15:57

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ok leider doch noch kein erfolg.

das mit dem $-Zeichen will nicht so ganz.

meinevariable := $zahl; // Dann erhalte ich folgende Fehlermeldung: [Fehler] Unit1.pas(59): E2066 Operator oder Semikolon fehlt

meinevariable ist ein integer
ich habe auch mal string ausprobiert geht aber auch nicht.

Was für ne Variable brauch ich denn, um ein HEX-Wert aufzunehmen?

Danke schonma ^^

ichbins 30. Nov 2005 16:06

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
eine Integer-Variable. Du kannst das Dollarzeichen weglassen. Mach
Delphi-Quellcode:
meinevariable:=integer(zahl);

KSebi 30. Nov 2005 16:13

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
so also mein aktueller quellcode:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  i,cha:integer;
  serial:string;
  neu:integer;

const
  hexes:array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

begin                       {Procedure}
if length(Edit1.Text) < 3 then
  Edit2.Text := 'Der Benutzername ist zu kurz!'
else if length(Edit1.Text) > 50 then
  Edit2.Text := 'Der Benutzername ist zu lang!'
else
begin                       {if}
  for i:=1 to length(Edit1.Text) do
  begin
    cha := integer(Edit1.Text[i]); {Get char }
    asm
    MOV eax,cha
    XOR eax,201527
    ADD eax,3735928559
    IMUL eax,eax, 1638
    SUB eax,464370355
    SHL eax,3
    XOR eax,3545092109
    ADD ebx,eax
    MOV neu,ebx
    end;
  end;

  {Hier muss EBX noch in einen HEX-Wert geändert werden}
  serial := hexes[neu div 16]+hexes[neu mod 16];
  Edit2.Text := serial;
end;                        {if}
end;                        {Procedure}

end.
Hab mir das mitm hex wo anders hier im Forum abgeschaut.

DOCH: Nun kann ich den Code zwar ausführen, wenn ich in das proggy dann aber einen namen eingebe, bricht das proggy mit nem fatalen Fehler ab. Findet hier jemand den Fehler?

Ich weiß derziet net weiter.

Schonma danke

ichbins 30. Nov 2005 16:20

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Zitat:

Delphi-Quellcode:
 serial := hexes[neu div 16]+hexes[neu mod 16];

muss das nicht heissen
Delphi-Quellcode:
 serial := inttostr(hexes[neu div 16])+inttostr(hexes[neu mod 16]);
was ist denn hexes? ist das auch eine Variable? mein Delphi kennt die nicht...


ACHSO, du hast eine
Delphi-Quellcode:
const hexes:string='0123456789ABCDEF'
[edit]

soweit bin ich schon dass er immer in der zweiten wiederholung beim Auslesen des Chars aus dem Edit abschmiert.

KSebi 30. Nov 2005 16:27

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ja nur hexes is halt bei mir en array kein string- denk aber, dass die umwandlunk funktionieren sollte.

Oder nicht? also leider noch keine Lösung gefunden.

ichbins 30. Nov 2005 16:30

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
du musst den Edit1.text schon am Anfang in eine Variable einlesen. Auf die greifst du dann zu:

Delphi-Quellcode:
var
  i,cha,neu:integer;
  serial,s:string;

const
  hexes:string='0123456789ABCDEF';
begin                       {Procedure}
if length(Edit1.Text) < 3 then
  Edit2.Text := 'Der Benutzername ist zu kurz!'
else if length(Edit1.Text) > 50 then
  Edit2.Text := 'Der Benutzername ist zu lang!'
else
begin                       {if}
  s:=edit1.text;
  for i:=1 to length(Edit1.Text) do
  begin
    cha := integer(s[i]); {Get char }
    asm
      MOV eax,cha
      XOR eax,201527
      ADD eax,3735928559
      IMUL eax,eax, 1638
      SUB eax,464370355
      SHL eax,3
      XOR eax,3545092109
      ADD ebx,eax
      MOV neu,ebx
    end;
  end;

  {Hier muss EBX noch in einen HEX-Wert geändert werden}
  serial := hexes[neu div 16]+hexes[neu mod 16];
  Edit2.Text := serial;
end;                        {if}
end;
jetzt gibt es noch eine AV weil deine Hex-Umwandlungs-Prozedur nur für Zahlen unter 256 geht.

Zur Hex-Umwandlung kannst du diese Proc verwenden:
Delphi-Quellcode:
function hextostr(hex:int64):string;
const
  hexes:string='0123456789ABCDEF';
var
  hextmp:int64;
  kn:boolean;
begin
  hextmp:=hex;
  kn:=false;
  result:='';
  if hextmp<0 then begin
    hextmp:=-hextmp;
    kn:=true;
  end;
  if hextmp=0 then begin
    result:='0';
    exit;
  end;
  while hextmp<>0 do begin
    result:=hexes[1+(hextmp mod 16)]+result;
    hextmp:=hextmp div 16;
  end;
  if kn then result:='-'+result;
end;
diese Funktion habe ich gerade selbst gebastelt. Müsste funktionieren für Zahlen zwischen +9223372036854775808 und -9223372036854775807.

aufdieselbe Art kannst du auch dein eigenes inttostr schreiben: einfach 16 durch 10 ersetzen und fertig.

KSebi 30. Nov 2005 16:35

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ok also jetzt bleibt der debugger doch bei der hexumwandlung stecken, nachdem ich edit1 gleich am anfang einlesen lasse. dafür schonmal danke! :)

Und hast ja auch gesagt, dass diese Umwandlung nur bis zu nem best. Wert funktioniert.

Also wie kann ich dann große Zahlen in Hex umwandeln lassen?

Schonma danke für die Antwort ;)

tigerman33 30. Nov 2005 16:43

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Gibt es nicht bei Delphi eine Routine StrToHex oder so ähnlich? In die andere Richtung (Zahl in Hex-String umwandeln) ist ja schließlich auch eine dabei.

PS: Das mit dem Dollarzeichen funktioniert nur bei Zahlen, die du direkt im Quellcode eingibst. Deinem Computer ist es nämlich egal, ob du eine Zahl als Ganzzahl, Hexadezimal oder Binär interpretieren willst--der Wert ist immer der gleiche, nur die Formatierung ändert sich. Und die ist dem Computer egal, ihn interessiert nur der Wert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.
Seite 2 von 3     12 3      

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