Autor Beitrag
ECO
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 18


D7 Personal
BeitragVerfasst: Mi 13.10.04 18:09 
Hallo zusammen!
Kann jemand diese code In delphi übersetzen.

ausblenden volle Höhe 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:
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 user profile iconChristian S.: Code-Tags hinzugefügt.
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mi 13.10.04 18:20 
ausblenden 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;  // exakter wäre Cardinal
  serial :Integer;  // s.o.
  CharTemp: char;
  serialTemp: Integer;
  i: Integer;
begin
  Name := edName.Text;   // Ich nehm edName ist ein TEdit
  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);  // Angepasst
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 18


D7 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Do 14.10.04 17:23 
Jo, hab ich was übersehen, sorry. Habs oben ausgebessert, jetzt müssts funktionieren!

raziel

_________________
JSXGraph
Alni
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 205

Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
BeitragVerfasst: Do 14.10.04 17:33 
Und noch was übersehen ;)

ausblenden Delphi-Quelltext
1:
2:
3:
  serial := serial + CharTemp; //Zeile 17

  serialTemp := CharTemp * 6//Zeile 20


ändern in

ausblenden Delphi-Quelltext
1:
2:
3:
  serial := serial + ord(CharTemp); //Zeile 17

  serialTemp := ord(CharTemp) * 6//Zeile 20

_________________
MfG Alex
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Do 14.10.04 17:36 
:oops: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 14.10.04 18:21 
^ ist nicht "Hoch", sondern xor
Und das (i+1) ist auch falsch.

Es muss also so aussehen:
ausblenden Delphi-Quelltext
1:
CharTemp := Chr(Ord(CharTemp) xor i);					



Zitat:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Do 14.10.04 20:19 
:autsch:

_________________
JSXGraph
ECO Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 18


D7 Personal
BeitragVerfasst: 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.

ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation
{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  Name: String;
  NameLong: Integer;  // exakter wäre Cardinal
  serial :Integer;  // s.o.
  CharTemp: char;
  serialTemp: Integer;
  i: Integer;
begin
  Name := Edit1.Text;   // Name ist ein TEdit
  NameLong := Length(Edit1.Text);
  serial := 0;
  //if Length (Edit1.Text) < 4 then Showmessage ('Mindestens 4 Zeichen eingeben!!!');


  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 user profile iconChristian S.: Delphi-Tags hinzugefügt.