Entwickler-Ecke
Sonstiges (Delphi) - Klasse für Paritätsbits bei ASCII code Umwandlungen
plague - Di 24.08.10 21:57
Titel: Klasse für Paritätsbits bei ASCII code Umwandlungen
Hallo,
ich bin grad dabei ein Programm zu schreiben das Wörter in den ASCII-code übersetzt und andersrum. Dieses Programm soll dann zum Chatten verwendet werden....
jetzt will ich Paritätsbits an die Datenketten anhängen.....
ich weiß aber einfach nicht, wie ich diese Klasse schreiben soll!?
Kann mir da jemand weiterhelfen? wär super... :-)
Gruß Plague
FinnO - Di 24.08.10 22:02
ein Paar mehr INformationen und Ansätze wären gut.
Anosnten schau dir die Protokolltutorials in der Delphi-Library an.
Blawen - Di 24.08.10 22:19
Ein paar Hintergrundinfos wären wirklich hilfreich.
Warum willst Du z.B. in den (veralteten) ASCII-Code umwandeln und wieso braucht es ein Paritätsbit (Übertragungsmedium?) ?
plague - Di 24.08.10 22:21
ich hab 4 units - unit 1, uchardual, uWortDual und UZahlDezDual und jetzt möchte ich noch eine Klasse schreiben, die halt Paritätsbits an die verschlüsselten DatenKetten hängen soll, damit der Empfänger überprüfen kann, ob alles richtig ist.....
braucht ihr auch den Quelltext?
plague - Di 24.08.10 22:40
ich hab bei google gesucht... so ist das ja nicht....und ich weiß auch, was ein paritätsbit macht!
Die Sache ist nur, dass ich noch nicht lange mit Delphi arbeite, und nicht einfach irgendwelche Sachen aus dem Netz übernehmen will, obwohl ich nicht wirklich weiß, was das jetzt genau macht....
lg plague
Blawen - Di 24.08.10 22:48
Ich denke, Du hast nur bedingt begriffen, für was ein Prüfbit ist.
Um zu überprüfen, ob der übertragene Text korrekt ist, würde ich eine "Prüfsumme" vorschlagen.
plague - Di 24.08.10 22:58
Es gibt zwei "Arten" von Paritätsbits: OddParity und EvenParity
bei even parity ist es so, dass wenn die Anzahl der 1er gerade ist, die Parität 0 ist, und bei odd parity, wenn die Anzahl der 1er ungerade ist, ist die Parität 0.
Paritätsbits sind dazu da, um Daten zu kontrollieren und korrigieren, damit übertragungsfehler erkannt und verbessert werden können.
Zur Korrektur reicht das Paritätsbit allerdings nicht aus, einen einzelnen Fehler kann man aber erkennen und die Daten dann erneut senden!
noch was?
Blawen - Di 24.08.10 23:41
plague hat folgendes geschrieben : |
Es gibt zwei "Arten" von Paritätsbits: OddParity und EvenParity
...
noch was? |
???
Was willst Du uns damit genau mitteilen? Für was ein Paritätsbit ist, ist soweit (allen) klar.
Aber willst Du wirklich auf Bit-Ebene prüfen, ob Dein einzelnes Zeichen korrekt ist? Eigentlich empfiehlt sich eher eine Prüfsumme über den gesamten (Teil-) Text.
| Zitat: |
| die halt Paritätsbits an die verschlüsselten DatenKetten hängen soll, damit der Empfänger überprüfen kann, ob alles richtig ist..... |
Ein Paritätsbit wird nicht einfach an den Schluss einer x-beliebig langen Datenkette gelegt!
So wie Du es beschreibst, scheint es eher um die (menschliche) Manipulation der Daten zu gehen und nicht um eine allfällige Datenkorruption auf der Übertragungsstrecke.
In diesem Falle würde ich, wie schon erwähnt, eine Prüfsumme (z.B. MD5) vom Text erstellen und diese entsprechend auswerten.
Das Prüfsummenverfahren kannst Du adaptieren (MD5) oder aber auch selber entwickeln.
plague - Mi 25.08.10 08:38
ich wollte nur zeigen, dass ich schon verstanden habe was ein Prüfbit ist.....
die Sache ist..... ich kann mir da leider nicht aussuchen, was ich da mache......ansonsten hätte ich sehr wahrscheinlich das gesamte Programm anders geschrieben...... aber das ist ja jetzt mal egal...... ich soll halt eine Klasse schreiben, die ein Prüfbit an die Daten hängt.....
Die Wörter werden ja in dem Programm erst mal in den ASCII code übersetzt, dann übermittelt, und der Empfänger kann sie dann wieder umwandeln..... da bei der Übertragung aber ja auch Fehler passieren könnten, sollen wir das halt machen......
plague - Do 26.08.10 16:10
kann mir da niemand helfen?
Gammatester - Do 26.08.10 16:50
Wie wär's mit dem genauen Wortlaut der Aufgabe? Wie schon gesagt: Paritätsbits an einen Text anhängen ist äh, naja ungewöhnlich. Alte serielle Schnittstellenbausteine haben das auf Hardware-Ebene bei einzelnen Zeichen gemacht. Wie willst Du eigentlich ein einzelnes Bit übertragen?
elundril - Do 26.08.10 16:52
Naja, wie willst du denn dein Bit speichern? Du könntest es einerseits als Boolean-Speichern (true und false kann man auch als 0 und 1 interpretieren) oder als Byte (kleinere Datengrößen gibts in Delphi nicht). Vl kann man noch einen eigenen Datentyp erstellen, ne art aufzählung, aber ich glaube das sind dann auch nur integer-werte.
Das berechnen weißt du ja eh wie es geht, hab ich dir ja den Link geschickt.
Grob zusammengefasst:
Du nimmst den String. Zerlegst jedes Zeichen in den dazu passenden ASCII-Code und jagst es dann durch die Analysemaschine fürs Paritätsbit. Wenn du mit dem String dann fertig bist, speicherst du das Paritätsbit in einen von dir gewünschten Datentyp.
lg elundril
delfiphan - Do 26.08.10 23:15
Für dich vielleicht overkill aber ideal wäre wenn du die Nachricht signierst und verschlüsselst. Dann hast du Integrität (Unverfälschtheit), Vertraulichkeit und Authentizität (Herkunft). Statt ASCII-code würde ich ein UTF-8 codiertes XML-Dokument nehmen.
Mit entsprechenden Libraries sollte das machbar sein, man muss sich aber ein wenig mit der Thematik auseinandersetzen.
platzwart - Fr 27.08.10 01:13
Ich denke eher, es geht hier um eine Hausaufgabe mit recht konkreter Aufgabenbeschreibung.
Um Missverständnissen vorzubeugen: Willst du von einem ganzen String das Paritätsbit berechnen oder von jedem Zeichen eines Strings?
plague - Mo 06.09.10 16:45
alle sieben Zeichen soll ein Paritätsbit eingefügt werden...
elundril - Mo 06.09.10 18:08
Du kannst nicht alle 7 Zeichen 1 BIT einfügen. Du kannst maximal Bytes einfügen. Auf die Bits hast du so einfach keinen Zugriff.
lg elundril
plague - Mo 06.09.10 19:26
so wurde es uns aber gesagt....
entschuldige, ich verbesser mich... sie sagte: alle sieben Bits ein Paritätsbit ....
sie meinte, man könne das ganze in einer Klasse realisieren, und dort dann halt unter anderem mit der Procedure EvenParity oder OddParity... kommt drauf an, wie mans will
Flamefire - Mo 06.09.10 21:26
na dann: einfach den input bitweise durchgehen, jedes bit ausgeben und alle 7 bit ein bit zur parität einfügen.wo ist das problem?
am einfachsten kommst du, wenn du eine klasse schreibst, die am ende einen stream nimmt, den analysiert (7 bits jeweils) und dann in einen internen stream schreibt. am ende wird der interne zurückgegeben oder verfügbar gemacht.
jetzt bist du mit ansätzen dran. wir helfen danach!
Stichworte: SHL x, SHR y, AND 1
alzaimar - Di 07.09.10 07:48
Ich glaube, es ist einfacher, mit einer Nachschlageliste zu arbeiten. Dort trägt man für jedes Zeichen einmalig die Anzahl der Einsen, oder gleich Gerade/Ungerade Anzahl ein. Also:
Delphi-Quelltext
1: 2:
| Var GeradeAnzahlVonEinsen : Array [0..127] of Boolean; |
Nun benötigst Du noch eine Funktion, die Dir für eine Zahl (0..127) TRUE liefert, wenn die Zahl eine gerade Anzahl von Einsen hat und FALSE sonst.
Delphi-Quelltext
1:
| Function HatGeradeAnzahlVonEinsen(EineZahl : Byte) : Boolean; |
Dann befüllst Du deine Nachschlageliste. Mit ner Schleife usw.
So. Nun hast Du deinen Text, der aus (7 bit) ASCII besteht, also keine Umlaute, Sonderzeichen und so.
Den gehst Du nun Zeichen für Zeichen durch und ersetzt das 8.Bit, das ja eh immer 0 ist, mit dem Inhalt der Nachschlageliste bzw. dem Gegenteil, je nach Odd/Even Parity. -Wuppsfertig-
Tipp 1: Wenn das rechte Bit 1 ist, ist die Zahl ungerade.
Tipp 2: Wenn man eine Zahl durch 2 teilt und den Rest ignoriert, verschiebt man alle Bits gleichzeitig nach rechts. Man kann die Bits auch einfach verschieben (engl: to shift)
Tipp 3: Um zu Prüfen, ob eine Zahl ungerade ist, gibt es eine Delphi-Funktion 'Odd'.
Boah, mehr gibts aber nicht.
ssb-blume - Di 07.09.10 09:33
Hallo,
es gibt auch eine Funktion "odd" !
Hansi
plague - Mo 13.09.10 14:52
ja.. ich weiß, aber die sagt einem doch nur, ob die Zahl ungerade ist oder nicht?
also eingebaut hab ich die jetzt schon in die Procedure, aber alleine bringts die nicht...
lg plague
platzwart - Mo 13.09.10 15:08
Es geht darum, ob die ANZAHL von Einsen gerade oder ungerade ist, und darum gehts ja beim Paritybit...
plague - Mo 13.09.10 15:23
procedure TZahlDezDualEvenParity.evenParity;
var i,anzahl: integer;
begin
anzahl:=0;
for i=1 to duallaenge do
if dualzahl[i]=true then
inc(anzahl);
if odd(anzahl)=true then
dualzahl[8]:=true
else
dualzahl[8]:=false;
end;
hab das jetzt so....
platzwart - Mo 13.09.10 15:29
Wobei du aus
Delphi-Quelltext
1:
| if dualzahl[i]=true then |
besser das machst:
Generell gilt: Nie explizit auf True prüfen;
plague - Mo 13.09.10 15:35
ah... okay... danke :-)
aber ich dachte immer, ich müsste wenn ich if hab, dem auch etwas zuordnen... !?
platzwart - Mo 13.09.10 16:59
Delphi-Quelltext
1: 2: 3:
| If Bedingung then ... If not Bedingung then ... |
plague - Mo 13.09.10 17:53
klingt logisch..... danke...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!