AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablentypen bei ord() erzeugen Fehler

Offene Frage von "KodeZwerg"
Ein Thema von Nox · begonnen am 12. Jul 2018 · letzter Beitrag vom 13. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2   
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#1

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 21:23
HAben sie vielleicht eine Idee für mein neustes Problem? tut mir leid aber auch da hab ich schon gefühlt tausend Kombinationen ausprobiert aber es geht einfach nicht (Frage in der anderen Antwort).
Welches neueste Problem? Nur ein Tipp: Der Code ist schwer lesbar, auch deshalb weil (zu mindest mir) nicht klar ist, was eigentlich gemacht werden soll. Da hilft, es ein gute Beschreibung der Aufgabe zu mache, und eventuell etwas was Pseudo-Code.
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#2

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 21:48
Welches neueste Problem? Nur ein Tipp: Der Code ist schwer lesbar, auch deshalb weil (zu mindest mir) nicht klar ist, was eigentlich gemacht werden soll. Da hilft, es ein gute Beschreibung der Aufgabe zu mache, und eventuell etwas was Pseudo-Code.
Bei der Entschlüsselung wird nur ein Buchstabe angezeigt.
Dieser ist der Anfangsbuchstabe des Textes des vorher verschlüsselten Textdokumentes.
Die Frage ist jetzt eigentlich nur wie ich nicht nur einen sondern alle Buchstaben einlesen ver- und entschlüsseln kann.

Die Formatierung war eigentlich auf eine viel kleineres Projekt ausgelegt tut mir sehr leid ich versuche das zu verbessern!

Es soll eine Textdatei ausgewählt werden können.
Diese wird danach eingelesen und als String in das Projekt importiert.
Nun soll mit hilfe der Funktion ord() zu jedem Buchstaben der Ascii Code (ich glaube das ist Ascii) in eine Variable geschrieben werden.
Um Die Verschlüsselung zu erreichen soll eine einzugebene Zahl als Multiplikator dienen um jegliche Ascii Zahlen (umgewandelte Buchstaben) zu "verschlüsseln".
das Ergebnis dieser Multiplikation soll im gleichen Textdokument gespeichert werden und den Originaltext ersetzen.

Beim Entschlüsseln soll durch eingabe des zuvor frei gewählten Faktors die "Verschlüsselung", also die Multiplikation, rückgängig gemacht werden und die Original Ascii Zahlen wiederhergestellt werden.
Durch Chr() sollen die umgewandelten buchstaben nun wiederherstellbar sein und im selben Textdokument, die verschlüsselten Zahlen ersetzend, gespeichert werden.

Ich hoffe das Funktionsprinzip ist nun eher verständlich!

LG Noah
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:08
Ja das ist besser verständlich. Da bieten sich Strings an, jeweils einer für's Original und die verschlüsselte Ausgabe. Ein einfaches Beispiel:
Delphi-Quellcode:
var
  s,t: string;
  i: integer;
  c1,c2: char;
begin
  readln(s);
  t := '';
  for i:=1 to length(s) do begin
    c1 := s[i];
    //berechne c2 aus c1
    //Beispiel:
    //die nächste Zeile invertiert das unterste Bit des Zeichens
    c2 := char(ord(c1) xor 1);
    t := t + c2;
  end;
  writeln(t);
end.
Wenn man 'Test' eingibt, ist die Ausgabe 'Udru'.

Das ganze dann in eine Schleife einbauen, Lesen und Schreiben in Datei.

Achtung, beim Verschlüsseln können Zeichen generiert werden, die nicht lesbar sind oder Pascal-Readln durcheinander bringen (zB wenn ein Zeilenende generiert wird).
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#4

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:25
Delphi-Quellcode:
var
  s,t: string;
  i: integer;
  c1,c2: char;
begin
  readln(s); //s ist also das Textdokument in Form eines Strings?
  t := '';
  for i:=1 to length(s) do begin
    c1 := s[i]; // s[1] steht dabei für welche Operations? (bin nur Anfänger)
    //berechne c2 aus c1 //Ist c1 dabei der unverschlüsselte Buchstabe und c2 der verschlüsselte?
    //Beispiel:
    //die nächste Zeile invertiert das unterste Bit des Zeichens
    c2 := char(ord(c1) xor 1); //wofür ist dieser Schritt? ist das eine anderer Vorschlag für eine "Verschlüsselung"?
    t := t + c2; //ist t der String der im Ausgabedokument abgespeichert werden soll?
  end;
end.
Tut mir leid wenn das nervt...

LG Noah
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:39
Zitat:
c1 := s[i]; // s[1] steht dabei für welche Operations? (bin nur Anfänger)
Das ist s[i] nicht s[1], das i-Zeichen im Eingabestring
Zitat:
//berechne c2 aus c1 //Ist c1 dabei der unverschlüsselte Buchstabe und c2 der verschlüsselte?
Ja, da setzt Du dann Deine spezielle Verschlüsselung ein.
Zitat:
t := t + c2; //ist t der String der im Ausgabedokument abgespeichert werden soll?
Ja, man start mit einem leeren String und hängt jeweil das gerade verschlüsselte Zeichen an.

Zitat:
Um Die Verschlüsselung zu erreichen soll eine einzugebene Zahl als Multiplikator dienen um jegliche Ascii Zahlen (umgewandelte Buchstaben) zu "verschlüsseln".
das Ergebnis dieser Multiplikation soll im gleichen Textdokument gespeichert werden und den Originaltext ersetzen.
Das ist nicht so einfach, weil

1) eine Textdatei nicht gleichzeitig gelesen und geschrieben werden kann

2) nicht jeder Faktor geignet ist (für 8-Bit-Zeichen muss der Faktor teilfremd zu 256 sein).

Geändert von gammatester (12. Jul 2018 um 22:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:44
Delphi-Quellcode:
procedure DateiDingens(const InputString: string; const Modifier: Byte; var Output: String);
var
  s: string;
  i: Integer;
  b: Byte;
  f: file of Byte;
begin
  // Datei mit verschluesseltem Inhalt sichern
  AssignFile(F, Application.ExeName+'.txt');
  Rewrite(f);
  for i := 1 to Length(InputString) do
  begin
    b := Ord(InputString[i]) + Modifier;
    write(f, b);
  end;
  CloseFile(F);

  // Datei mit verschluesseltem Inhalt laden
  AssignFile(F, Application.ExeName+'.txt');
  Reset(F);
  s := '';
  while not Eof(F) do
  begin
    Read(f, b);
    s := s + Char(b - Modifier);
  end;
  CloseFile(F);
  Output := S;
end;
Das sollte das machen was Du möchtest, Dateinamen ersetzen und ab gehts
Ps: Das ist ein all-in-one Beispiel damit Du gleich siehst wie man speichert und lädt.
Pps: InputString sollte Text sein, bei Binär läuft das mit dem Modifier schnell über 255 hinaus und alles ist futsch.
Gruß vom KodeZwerg

Geändert von KodeZwerg (12. Jul 2018 um 22:49 Uhr)
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
22 Beiträge
 
#7

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:50
Zitat:
c1 := s[i]; // s[1] steht dabei für welche Operations? (bin nur Anfänger)
Das ist s[i] nicht s[1], das i-Zeichen im Eingabestring
Zitat:
//berechne c2 aus c1 //Ist c1 dabei der unverschlüsselte Buchstabe und c2 der verschlüsselte?
Ja, da setzt Du dann Deine spezielle Verschlüsselung ein.
Zitat:
t := t + c2; //ist t der String der im Ausgabedokument abgespeichert werden soll?
Ja, man start mit einem leeren String und hängt jeweil das gerade verschlüsselte Zeichen an.

Zitat:
Um Die Verschlüsselung zu erreichen soll eine einzugebene Zahl als Multiplikator dienen um jegliche Ascii Zahlen (umgewandelte Buchstaben) zu "verschlüsseln".
das Ergebnis dieser Multiplikation soll im gleichen Textdokument gespeichert werden und den Originaltext ersetzen.
Das ist nicht so einfach, weil

1) eine Textdatei nicht gleichzeitig gelesen und geschrieben werden kann

2) nicht jeder Faktor geignet ist (für 8-Bit-Zeichen muss der Faktor teilfremd zu 256 sein).

Der 1. Punkt macht auf jeden Fall Sinn Super!
Bei dem 2. versteh ich es jedoch nicht ganz...ist es nicht egal welche Zahlen benutzt werden da die Verschlüsselung ja mit der Multiplikation und erst die Entschlüsselung mit der Division des bereits benutzten Multiplikators abläuft?
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#8

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:04
Bei dem 2. versteh ich es jedoch nicht ganz...ist es nicht egal welche Zahlen benutzt werden da die Verschlüsselung ja mit der Multiplikation und erst die Entschlüsselung mit der Division des bereits benutzten Multiplikators abläuft?
Nein, aus zwei Gründen. Die (Ansi-)Zeichen haben 8-Bit, ord also liefert Werte 0..255, wenn Du die multipliziert erhält man im allgemeinen Werte > 255, die damit nicht in ein Zeichen passen. Deshalb könnte der Verschlüsselungsteil sein

c2 := char( faktor*ord(c1) mod 256)

als nur die untersten 8 Bit des Produkts.

Zweitens: Wenn Du zB faktor=16 hast, gibt es ein Problem

16 -> 0
32 -> 0

etc. Das heißt, eine Entschlüsselung ist nicht möglich. Aber zB factor=13 ist, entschlüsselt wird dann mit dem Faktor 197. (Das ist modulare Mathematik, muss man nicht unbedingt wissen).

Und nochmal: Dies ist nur eine Einführung und gefährlich, weil nicht darstellbar Zeichen entstehen können. Wie schon von p80286 gesagt: binär wäre besser, d.h. Dein Ausgabe wäre ein file of byte.

Aber bau erstmal die Sache mit char/string.

Gute Nacht.

Geändert von gammatester (12. Jul 2018 um 23:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:45
kribbelige Finger
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (12. Jul 2018 um 22:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:48
Beim Ver- und Entschlüsseln würde ich maximalen Abstand von Strings nehmen, binär wäre besser aber sei's drum

Delphi-Quellcode:
var
  Infile : Textfile;
   s,t: string;
   i: integer;
   c1,c2: char;
begin
   assignfile(infile,'c:\irgendwo\Meinzuverschluesselnder.txt');
   reset(infile);
   assignfile(outfile,'c:\rgendwoanders\verschluesselter.txt');
   rewrite(outfile);
   //------------------------
   // Hier sollte nun eine Repeat until oder
   // while - Schleife beginnen
   //----------------
   readln(infile,s); //s ist der erste String einer Textdatei
   t := '';
   for i:=1 to length(s) do begin
     c1 := s[i]; // s[1] ist der ite Buchstabe des Strings
     //berechne c2 aus c1 //Ist c1 dabei der unverschlüsselte Buchstabe und c2 der verschlüsselte?
     //Beispiel:
     //die nächste Zeile invertiert das unterste Bit des Zeichens
     c2 := char(ord(c1) xor 1); //Eine Art Versclüsselung
     t := t + c2; //ist t der String der im Ausgabedokument abgespeichert werden soll? - Ja
   end;
   writeln(Outfile,t);
   //--------
   closefile(outfile);
   closefile(Infile);
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 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