![]() |
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: |
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öö |
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 ^^ |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
eine Integer-Variable. Du kannst das Dollarzeichen weglassen. Mach
Delphi-Quellcode:
meinevariable:=integer(zahl);
|
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
so also mein aktueller quellcode:
Delphi-Quellcode:
Hab mir das mitm hex wo anders hier im Forum abgeschaut.
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. 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 |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
Zitat:
Delphi-Quellcode:
was ist denn hexes? ist das auch eine Variable? mein Delphi kennt die nicht...
serial := inttostr(hexes[neu div 16])+inttostr(hexes[neu mod 16]);
ACHSO, du hast eine
Delphi-Quellcode:
[edit]
const hexes:string='0123456789ABCDEF'
soweit bin ich schon dass er immer in der zweiten wiederholung beim Auslesen des Chars aus dem Edit abschmiert. |
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. |
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:
jetzt gibt es noch eine AV weil deine Hex-Umwandlungs-Prozedur nur für Zahlen unter 256 geht.
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; Zur Hex-Umwandlung kannst du diese Proc verwenden:
Delphi-Quellcode:
diese Funktion habe ich gerade selbst gebastelt. Müsste funktionieren für Zahlen zwischen +9223372036854775808 und -9223372036854775807.
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; aufdieselbe Art kannst du auch dein eigenes inttostr schreiben: einfach 16 durch 10 ersetzen und fertig. |
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 ;) |
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 17:04 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