Autor Beitrag
Robii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Di 15.12.09 22:11 
Hallo Leute, ich hab eine Funktion geschrieben, in der ich einen String umwandeln möchte in die Ascii-Werte.
Leider klappt dies nicht.

Quellcode
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm2.bCryptClick(Sender: TObject);
var
  cS,dS,bS: string;

  i,iB: Integer;
begin
  dS := Log.Text;
  for i := 1 to Length(dS) do
    begin
      bS:= dS[i];
      iB:= ord(bS);
      cS:= cS+' '+IntToStr(iB);
      iB:=0;
    end;
  Log.Clear;
  Log.Text:=cS;
  Log.Lines.Add(Char(6011428));
end;


Wenn ich z.B. 'a b c d e f g h i j k l m n o p q r s t u v w x y z' eingebe und umwandeln lasse,
komtm folgendes herraus:
Zitat:

17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980 17939412 17938980


Und das kann ja nicht sein, den die Zahlen wiederholen sich ja.
Wieso?

Lieben Gruß.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Di 15.12.09 22:29 
Hallo,

ord sollte ein Char und nicht einen String als Parameter haben.

Versuche:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  cS,dS,bS: string;
  i,iB: Integer;
begin
  dS := Log.Text;
  for i := 1 to Length(dS) do
    begin
      bS:= dS[i];
      iB:= ord(bS[1]); // erste stelle des string
      cS:= cS+' '+IntToStr(iB);
      iB:=0;
    end;
  Log.Clear;
  Log.Text:=cS;
  Log.Lines.Add(Char(6011428));


oder kuerzer: (kannst Dir iB und bS sparen)
ausblenden Delphi-Quelltext
1:
cs:=cs+' '+IntToStr(ord(dS[i]));					


bis denne
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Di 15.12.09 22:34 
Danke für die fixe Antwort.

So ein Fehler hätte mir eigentlich auch auffallen dürfen.
Peinlich, aber Danke.

Lieben Gruß.

E: Hab da noch eine Frage.

Und zwar habe ich jetzt einen String der so aufgebaut ist:
' XX XX XXX XX '
Die Anzahl der X'e ist nun wilkürlich gewählt.
Jetzt möchte ich mit diesem Befehl
ausblenden Delphi-Quelltext
1:
    bS:= Copy(cS,2,Pos(' ',cS)-1);					

In dem String bS die ersten beiden XX speichern und per Char() wieder zurück verwandeln. Bei mir kommt immer eine Fehlermeldung das "" kein Integer ist.

Lieben Gruß

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Habs dann bis jetzt so hinbekommen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
  cS := Log.Text;
  for i := 0 to Length(cS) - 1 do
  begin
    if(cS[1]=' ')
      then Delete(cS,1,1);
    bS:= Copy(cS,1,AnsiPos(' ',cS)-1);
    bs2:= Char(StrToInt(bS));
    Delete(cS,1,AnsiPos(' ',cS));
    cS:= bs3;
  end;


Aber irgendwas stimmt da noch nicht, denn, das erste mal läuft die Schleife durch
und beim 2ten Mal, nicht mehr mit dem gleichen Fehler wie oben.

Folgenden String will ich umwandeln:
Zitat:
336 138 264 348 111 150 138 228 300 309 216 315 501 153 150 138 99 144 39 30


Aber irgendwie haut das nicht hin.
Wär nett, wenn mir nochmal jemand hilft.

Lieben Gruß.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 15.12.09 23:24 
Moin!

Erstes Problem:
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Folgenden String will ich umwandeln:
Zitat:
336 138 264 348 111 150 138 228 300 309 216 315 501 153 150 138 99 144 39 30
Die markierten Werte sind nicht im Wertebereich von Char(), das kann also schonmal nicht klappen. :nixweiss:

Wenn es nur Werte von 0..255 sind, dann probier das mal so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  var
    Werte: TStringList;
    i: Integer;
    Ausgabe: String;
begin
  Werte := TStringList.Create;
  try
    Werte.CommaText := Log.Text;
    Ausgabe := '';
    for i := 0 to Werte.Count-1 do
      Ausgabe := Ausgabe +Chr(StrToIntDef(Werte.Strings[i],32));
    Log.Text := Ausgabe;
  finally
    Werte.Free;
  end;

cu
Narses

//EDIT: Char() in Chr() korrigiert.

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Di 15.12.09 23:38, insgesamt 1-mal bearbeitet
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Di 15.12.09 23:35 
Zuerst, sorry, hatte mich vertippt, ich meine nicht Char() sondern Chr().

Wenn ich jetzt deine Funktion benutze (Narses), dann klappt diese auch wunderbar, allerdings wird nicht der gleiche String wieder entziffert, wie ich ihn vorher mit Ord() umgewandelt habe. Es kommen also andere Zeichen herraus, wieso?

Lieben Gru0ß & Danke.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 15.12.09 23:39 
Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich jetzt deine Funktion benutze (Narses), dann klappt diese auch wunderbar, allerdings wird nicht der gleiche String wieder entziffert, wie ich ihn vorher mit Ord() umgewandelt habe. Es kommen also andere Zeichen herraus, wieso?
Keine Ahnung, zeig mal deinen Encoder. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Di 15.12.09 23:42 
Also das hier sind die beiden Funktionen:
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:
procedure TForm2.bCryptClick(Sender: TObject);
var
  cS,dS: string;
  i: Integer;
begin
  dS := Log.Text;
  for i := 1 to Length(dS) do
    begin
      cS:= cS+' '+IntToStr(Ord(dS[i])*3);
    end;
  Log.Clear;
  Log.Text:=cS;
end;

procedure TForm2.bDecryptClick(Sender: TObject);
var
  Werte: TStringList;
  i: Integer;
  Ausgabe: String;
begin
  Werte := TStringList.Create;
  try
    Werte.CommaText := Log.Text;
    Ausgabe := '';
    for i := 0 to Werte.Count-1 do
      Ausgabe := Ausgabe +Chr(StrToInt(Werte.Strings[i]));
    Log.Text := Ausgabe;
  finally
    Werte.Free;
  end;
end;


Allerdings glaube ich liegt das daran, das ich die Leerzeichen ja mit umwandel, oder nicht?
Jetzt bin ich grade verunsichert :?

Lieben Gruß.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 15.12.09 23:47 
Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Allerdings glaube ich liegt das daran, das ich die Leerzeichen ja mit umwandel,
Nein, es liegt daran, dass du:

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
procedure TForm2.bCryptClick(Sender: TObject);
//...
      cS:= cS+' '+IntToStr(Ord(dS[i])*3);
die Zeichenwerte *3 nimmst, aber nicht wieder durch 3 teilst, beim decodieren. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Di 15.12.09 23:50 
Ah, irgendwie bin ich Heute leicht daneben.

Danke schön, hatte ganz vergessen, das unten wieder rückgänig zu machen.

Danke, klappt jetzt.
Lieben Gruß.