Re: String Frage
- From: Roland Damm <roland-damm@xxxxxxxx>
- Date: Tue, 10 Mar 2009 22:33:14 +0100
Moin,
Edi schrub:
Ich hab das jetz ausprobiert und auch die Tips aus den
folgepostings, witzig ist der Teil aus deinem Code:
| 0x80
für was ist der ? Weil ohne dem, kann es passieren das ein
Leerzeichen rauskommt, und beim zurück umwandeln
wandelt er das Leerzeichen nicht mehr und somit ist die
Rückumwandlung ungleich dem Original.
Das wäre doof :)
Als Beispiel wo so ein Leerzeichen rauskommen würde:
....
Kann ich nicht 100% nachvollziehen, aber:
Die üblichen druckbaren Zeichen liegen im ASCII-Zeichensatz
zwischen den Codenummern 33 bis 127. Die Zeichen 0..32 (?) sind
formatierungszeichen, so was wie Zeilenende, Seitenvorschub,...
Die Zeichen über 127 sind traditionell uneinheitlich definiert
und enthalten Umlaute und andere komische Sonderzeichen,
darunter eventuell auch solche, die auf gewissen Systemen nicht
angezeigt werden können. Es mag mancherorts so sein, dass
Zeichen aus diesem Bereich als Leerzeichen angezeigt werden.
Oder garnicht. Wer weiß was sich da alles für verschiedene
Zeichensatzdefinitionen verhaken können....
Die Sache mit dem 0x80 (oder dezimal 128) tut folgendes:
Wollte man folgendes verschlüsseln mit
Text: abcdef...
Schlüssel: 123d45...
passiert: ***
*: keine Lust das auszurechnen. Aber dann: Ein Buchstabe wird mit
sich selbst verschlüsselt, die xor-Verknüpfung liefert in diesem
Fall als Ergebnis eine 0. Nicht das Zeichen '0', sondern die
Zahl Null, welche als Ende der Zeichenkette interpretiert wird.
Das Setzen des höchsten Bit (0x80 oder dezimal 128) führt dazu,
dass der Schlüssel auf allen seinen Zeichen das höchste Bit
gesetzt hat. Wenn der Text dieses nicht hat, weil es nur
normaler lesbarer Text ohne Sonderzeichen ist, dann kann es
nicht mehr passieren, dass im Schlüssel die gleiche Codenummer
steht, wie im Text.
Und übrigens Leerzeichen: Bei der Eingabe wird sowieso nur bis
zum ersten Leerzeichen gelesen. Da steht ein scanf("%s... und
das liest als Zeichenkette nur Zeichenketten ohne Leerzeichen.
Du darfst bei dem kleinen Programm also garkeine Leerzeichen
eingeben. Allerdings dürfen Zeichenketten sehr wohl Leerzeichen
beinhalten, nur kann man solche nicht via scanf("%s... einlesen,
da muss man dann was anderes machen (getline oder sowas).
CU Rollo
.
- Follow-Ups:
- Re: String Frage
- From: Edi
- Re: String Frage
- References:
- String Frage
- From: Edi
- Re: String Frage
- From: Roland Damm
- Re: String Frage
- From: Edi
- String Frage
- Prev by Date: Re: String Frage
- Next by Date: Re: String Frage
- Previous by thread: Re: String Frage
- Next by thread: Re: String Frage
- Index(es):
Relevant Pages
|