| Autor |
Beitrag |
ECO
      
Beiträge: 18
D7 Personal
|
Verfasst: Mi 13.10.04 18:09
Hallo zusammen!
Kann jemand diese code In delphi übersetzen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| { String Name; unsigned int NameLong; unsigned int serial; unsigned char CharTemp; unsigned int serialTemp;
Name=edName->Text; NameLong=edName->GetTextLen(); serial=0; serialTemp=0;
unsigned int i=0;
do { CharTemp=Name[i+1]; i++; CharTemp = CharTemp^i; serial += CharTemp; } while (i<NameLong);
serialTemp = CharTemp*6; serial = serial<<7; serial += serialTemp;
char buffer[80];
sprintf(buffer, "%X", serial);
edSerial->Text=buffer; // 78960 -> 13470 |
Ich kann nicht c oder c++
wäre schön wenn ihr mir helfen könnt.
MFG
ECO
Moderiert von Christian S.: Code-Tags hinzugefügt.
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mi 13.10.04 18:20
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var Name: String; NameLong: Integer; serial :Integer; CharTemp: char; serialTemp: Integer; i: Integer; begin Name := edName.Text; NameLong := Length(edName.Text); serial := 0;
for i := 1 to NameLong do begin CharTemp := Name[i]; CharTemp := Chr(Trunc(Power(Ord(CharTemp), i+1)) mod 256); serial := serial + Ord(CharTemp); end;
serialTemp := Ord(CharTemp) * 6; serial := serial shl 7; serial := serial + serialTemp;
edSerial.Text := Format("%X", serial); end; |
Hoffe, es funktioniert. In der Zeile mit dem Angepasst, war ich mir nicht ganz sicher, ob das in C/C++ stimmen kann, kann aber sein, dass da automatisch wieder bei 0 angefangen wird, wenn der Datentyp "überläuft"...
raziel
PS: Was ist das? Ist bestimmt eine Hash-Funktion, oder? 
_________________ JSXGraph
Zuletzt bearbeitet von raziel am Do 14.10.04 17:53, insgesamt 3-mal bearbeitet
|
|
ECO 
      
Beiträge: 18
D7 Personal
|
Verfasst: Do 14.10.04 16:32
Titel: Übersetzen
Hallo!
Nein ist kein Hash Code.
Ich will grade eine Serial nummern abfrage Progen für mein Programm,
Und das war bis jetzt das einzigste was ich fand.
Danke für deine Übersetzung.
Aber ich habe eine fehler meldung.
CharTemp := Trunc(Power(CharTemp,<--- i+1)) mod 256; // Angepasst
<-- Da komme ich trotz Delphi Hilfe nicht weiter.
Wäre schön wenn du mir da noch mal helfen könntes.
MFG
ECO
PS Habe D7 pers. WinXP
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Do 14.10.04 17:23
Jo, hab ich was übersehen, sorry. Habs oben ausgebessert, jetzt müssts funktionieren!
raziel
_________________ JSXGraph
|
|
Alni
      
Beiträge: 205
Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
|
Verfasst: Do 14.10.04 17:33
_________________ MfG Alex
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Do 14.10.04 17:36
 Danke, habs ausgebessert.
//edit: ich probier grad weng rum und bekomm ne ungültige Gleitkommaoperation...
//edit: grandios. Die ungültige Gleitkommaoperation-Exception wirft er mir um die Ohren, wenn der String zu lang ist -> Der Exponent ist zu groß. Mach ich den Exponent kleiner gehts zwar, aber die Ergebnisse sind unterschiedlich... 
_________________ JSXGraph
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Do 14.10.04 18:21
^ ist nicht "Hoch", sondern xor
Und das (i+1) ist auch falsch.
Es muss also so aussehen:
Delphi-Quelltext 1:
| CharTemp := Chr(Ord(CharTemp) xor i); |
| Zitat: | Quelltext 1: 2: 3: 4: 5: 6: 7:
| do { CharTemp=Name[i+1]; i++; CharTemp = CharTemp^i; serial += CharTemp; } while (i<NameLong); |
|
Das ist ja die reinste Zeitbombe.
_________________ Ist Zeit wirklich Geld?
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Do 14.10.04 20:19
_________________ JSXGraph
|
|
ECO 
      
Beiträge: 18
D7 Personal
|
Verfasst: Fr 15.10.04 16:10
Titel: Danke für die schnelle Hilfe!!
Hallo!!
Ich möchte mich bei allen bedanken für die schnelle Hilfe.
Vielen Dank an alle die mir geholfen haben.
Ich habe hier noc<h mal den kompletten Code.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Math, XPMan;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; XPManifest1: TXPManifest; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Name: String; NameLong: Integer; serial :Integer; CharTemp: char; serialTemp: Integer; i: Integer; begin Name := Edit1.Text; NameLong := Length(Edit1.Text); serial := 0;
for i := 1 to NameLong do begin CharTemp := Name[i]; CharTemp := Chr(Ord(CharTemp) xor i); serial := serial + ord(CharTemp); end;
serialTemp := ord(CharTemp) * 6; serial := serial shl 7; serial := serial + serialTemp; if Length (Edit1.Text) < 4 then Edit2.Text:= ('Mindestens 4 Zeichen eingeben!!!') else Edit2.Text := Format('%X', [serial]);
end; end. |
So funktioniert es 100%.
Danke
ECO
Moderiert von Christian S.: Delphi-Tags hinzugefügt.
|
|