Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Ord()?!
Robii - Di 15.12.09 22:11
Titel: Ord()?!
Hallo Leute, ich hab eine Funktion geschrieben, in der ich einen String umwandeln möchte in die Ascii-Werte.
Leider klappt dies nicht.
Quellcode
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
Narses: Code- durch Delphi-Tags ersetzt
Muck - Di 15.12.09 22:29
Hallo,
ord sollte ein Char und nicht einen String als Parameter haben.
Versuche:
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]); 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)
Delphi-Quelltext
1:
| cs:=cs+' '+IntToStr(ord(dS[i])); |
bis denne
Robii - 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
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
Narses: Beiträge zusammengefasst---
Habs dann bis jetzt so hinbekommen:
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
Narses: Code- durch Delphi-Tags ersetzt
Narses - Di 15.12.09 23:24
Moin!
Erstes Problem:
Robii hat folgendes geschrieben : |
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:
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.
Robii - 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
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Narses - Di 15.12.09 23:39
Moin!
Robii hat folgendes geschrieben : |
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
Robii - Di 15.12.09 23:42
Also das hier sind die beiden Funktionen:
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 - Di 15.12.09 23:47
Moin!
Robii hat folgendes geschrieben : |
Allerdings glaube ich liegt das daran, das ich die Leerzeichen ja mit umwandel, |
Nein, es liegt daran, dass du:
Robii hat folgendes geschrieben : |
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
Robii - 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ß.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!