![]() |
Text in Dualzahlen umwandeln
Hallo,
ich habe ein Problem bei dem ich einfach nicht weiterkomme. Ich möchte gerne einen Text, der in ein Editfeld eingegeben wurde, in Dualzahlen,also Nullen und Einsen, umwandeln. Hat jemand eine Idee wie man das macht? Wäre super wenn mir jemand das ganz genau erklären könnte, da ich nicht sooo viel von Delphi verstehe. MfG countdown |
Re: Text in Dualzahlen umwandeln
Erstmal herzlich willkommen in der DP :dp:
Deine Frage verstehe ich, ehrlich gesagt, nicht. Frage noch einmal genauer, bitte |
Re: Text in Dualzahlen umwandeln
Du möchtest einen Text in Binärzahlen umwandeln? Oder meinst du, du willst eine Dezimalzahl ins Binärsystem konvertieren? Ich frage mich, wie du auf die Idee kommst, sowas zu programmieren. Schule?
|
Re: Text in Dualzahlen umwandeln
Du könntest den jeweiligen Buchstabenwert in seinen Ordinalwert konvertieren und diesen Dual darstellen.
|
Re: Text in Dualzahlen umwandeln
ASCII-Tabelle?
Fragen über Fragen Genauere Fragen ergäben bessere Antworten. [/Edit] Sage uns doch bitte, was du genau vorhast [/Edit] |
Re: Text in Dualzahlen umwandeln
Danke für die freundliche Begrüßung :-D
Also ich möchte gerne einen Text in ein Editfeld eingeben z.b. "Hallo". Nun gib es doch die Möglichkeit die einzelnen Buchstaben als Folge von Nullen und Einsen darzustellen. Dies möchte ich gerne machen und der umgewandelte Text soll dann wieder in dem Editfeld ausgegeben werden. Ich stelle mir das ungefähr so vor, dass man mit einer for-Schleife durch den Text geht und dann eben jeder Buchstabe durch eine Folge von Nullen und Einsen ersetzt wird. Dafür müsste man dann natürlich iwo auflisten, welcher Buchstabe welche Folge von Nullen und Einsen hat. Oder gibt es da vielleicht eine einfachere Lösung? Zur Frage wie ich auf die Idee komme: Ich möchte gerne ein Verschlüsselungsverfahren umsetzten.Also einen Text in Dualzahlen umsetzten genauso wie einen Schlüssel, den man ebenfalls eingeben können soll, und den Text dann mit Hilfe des Schlüssels verschlüsseln. @ die muhkuh: Wie gesagt ich versteh noch nicht so viel von Delphi..also versteh ich bei deiner Aussage nur Bahnhof^^ |
Re: Text in Dualzahlen umwandeln
Wie bereits gesagt wurde, entspricht jeder Buchstabe einem ASCII-Wert. (Bei wiki mal nach ASCII-Tabelle suchen).
Die Idee mit der For-Schleife ist richtig. Den Wert eines Buchstabens bekommst du mit der Funktion Ord. Anschließend musst du nur noch den dezimalen Wert in einen Binären Wert umrechnen. Da würd ich mal im Forum suchen nach Binärzahl oder so, findet sich einiges zu. |
Re: Text in Dualzahlen umwandeln
Wie Die Muhkuh schon schrieb:
Nimm jeden Buchstaben, bilde mit ORD den ASCII-Wert dazu und wandle die Integerzahl nach Dual um. Fertige Lösung dazu findest du in der CodeLib. |
Re: Text in Dualzahlen umwandeln
1.
Alle Zeichen werden (in der Computerwelt) durch eine bestimmte Zahl dargestellt. Die Zahlen zu all den Zeichen findest du in der ![]() Per Ord() Function (in Delphi) ermittelst du den Ascii-Wert von einem Zeichen. Folglich gäbe dir zb. Ord('A') den Wert 65 zurück. 2. Für die duale Darstellung eines Dezimalzahls musst du nur umrechnen. Dazu gibt es bestimmte Vorgänge, die du selber nachrecherchieren solltest, da es wirklich nicht hier rein gehört. Nachdem du das hast, kannst du dann, so wie du eh anfangs beschrieben hast, vorgehen: Eine Schleife: Alle Zeichen des eingegebenen Strings (Textes) durchgehen und für jedes Zeichen den Ascii Wert ermitteln; Die Dezimalzahl (Ascii-Wert, per Ord()) dann in eine Dualzahl verwandeln; Hoffe dir auf einfachste Art und Weise geholfen zu haben =) MfG |
Re: Text in Dualzahlen umwandeln
schau mal hier:
Delphi-Quellcode:
sWert = Ascii-Wert eines Buchstaben
while sWert / 2 <> 0 do
begin sAusgabe := IntToStr(sWert mod 2) + sAusgabe; sWert := sWert div 2; end; sAusgabe = Text der ins Edit-Feld kommen soll ^^ Damit kannst du eine Zahl in Binär umwandeln ;-) (Wenn Fehler da sind, einfach bescheid geben oder korregieren ^^) Achja, die Schleife prüft nicht ob pro Zeichen 8 Stellen geschrieben werden... Musst du gegebenenfalls nochmal überprüfen |
Re: Text in Dualzahlen umwandeln
Zitat:
sWert müsste dann wohl eher ein bWert oder ein iWert sein :stupid: |
Re: Text in Dualzahlen umwandeln
Zitat:
|
Re: Text in Dualzahlen umwandeln
Hallo Leute!
danke für die ganzen Hilfen, aber iwie verzweifele ich im Moment schon an der Umwandlung eines Textes in die ascii-werte... Hier mal etwas Quelltext:
Delphi-Quellcode:
Var
S: integer ttext: string begin For s:= 1 to length(ztext) do begin ttext:= inttostr(ord(ztext[s])); // ttext:= ttext + intostr(ord(ztext[s])); end; ztext:= ttext; end; ztext ist der in ein Editfeld eingegebene Text. Nun möchte ich, dass jedes Zeichen von ztext in mit ord umgewandelt wird, dann zu einem string gemacht wird und als ttext gesetzt wird.Am Ende wird ztext dann zu ttext und ich kann mir ztext in einem editfeld wieder ausgeben lassen. Das Problem ist aber dass bei der Lösung mit "ttext:= inttostr(ord(ztext[s]));" die eig ja nur für einen Buchstaben ist, da ttext ja sonst immer wieder neu überschrieben wird, auch bei unterschiedlichen Eingaben immer die selbe Zahl 116 zurückkommt. Bei der Lösung // ttext:= ttext + intostr(ord(ztext[s])); , mit der man meiner meinung nach ja auch mehr zeichen umwandeln und wieder ausgeben können müsste, bekomme ich schon bei einer eingabe von nur einem zeichen eine 50-60 Stellige Zahl zurück! Weiß da jemand Rat und könnte mir vielleicht zeigen wie es richtig gemacht wird? |
Re: Text in Dualzahlen umwandeln
Wo und wie rufst du denn deine Routine auf?
Grundsätzlich sollte die auskommentierte Variante schon funktionieren. Die nicht auskommentierte Variante müsste normalerweise den ASCII-Wert des letzten Zeichens in ztext liefern, da du zwar eine Schleife über alle Zeichen durchläufts, aber den ermittelten Wert immer wieder überschreibst. |
Re: Text in Dualzahlen umwandeln
ich habe eine "neueklasse" erstellt, die das attribut ztext und einige methoden u.a auch "textumwandeln" besitzt.
nun habe ich in der hauptunit ztext über die methode "setztetext" aus der klasse "neueklasse" den in ein editfeld eingegebenen Text zugewiesen und rufe dann über eine buttonclick methode die prozedure "textumwandeln" auf in der der angegebene Quelltext steht. Über eine Methode gibtext der klasse "neueklasse" lasse ich dann in der hauptunit ztext wieder in einem editfeld ausgeben. Hoffe das ist verständlich formuliert^^ |
Re: Text in Dualzahlen umwandeln
versuch es doch einmal mit dieser Simpellösung:
Delphi-Quellcode:
Gruß
function Byte2Bin(inbyte:byte):string;
const bina:array [0..1] of char=('0','1'); begin result:=' '; result[1]:=bina[(inbyte shr 7) and $01]; result[2]:=bina[(inbyte shr 6) and $01]; result[3]:=bina[(inbyte shr 5) and $01]; result[4]:=bina[(inbyte shr 4) and $01]; result[5]:=bina[(inbyte shr 3) and $01]; result[6]:=bina[(inbyte shr 2) and $01]; result[7]:=bina[(inbyte shr 1) and $01]; result[8]:=bina[(inbyte and $01)]; end; procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i:=1 to length(label1.caption) do label2.Caption:=label2.Caption+' '+Byte2Bin(byte(label1.Caption[i])); end; K-H |
Re: Text in Dualzahlen umwandeln
Also bei mir funktioniert das problemlos:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: integer; ttext: string; begin for s:= 1 to length(Edit1.Text) do begin ttext:= ttext + inttostr(ord(Edit1.Text[s])); end; Label1.Caption := ttext; end; |
Re: Text in Dualzahlen umwandeln
Danke p80286 auch wenn ich die funktion, die du mir gegeben hast, absolut nicht verstehe, konnte ich es zu laufen bringen indem ich es so in die hauptunit geschrieben habe:
Delphi-Quellcode:
was jetzt nicht verstehe ist warum das ganze nicht funktioniert, wenn ich das umwandeln in eine andere klasse auslagern will...
procedure TForm1.Button3Click(Sender: TObject);
var s:integer; begin for s:= 1 to length(edit1.text) do label17.caption := label17.caption + inttostr(ord(edit1.text[s])) ; end; hat da noch jemand eine antwort drauf?wäre super wenn ihr mir das noch erklären könntet aber ich bin erstmal froh, dass es jetzt soweit bei mir klappt:) danke an alle |
Re: Text in Dualzahlen umwandeln
Was genau funktioniert denn nicht? :glaskugel:
|
Re: Text in Dualzahlen umwandeln
alles klar hat sich erledigt, ich habe den fehler selber gefunden:P
danke nochmals an alle helfer |
Re: Text in Dualzahlen umwandeln
Zitat:
|
Re: Text in Dualzahlen umwandeln
war eigentlich ein dummer fehler..
ich hatte ztext seinen String aus dem Editfeld schon bei Formactivate zugewiesen und nicht erst bei der buttonclick procedure..dadurch wurde das, was zu Begin im EditFeld steht( bei mir war es "zu verschlüsselnder text") in Dezimale umgewandelt, was natürlich auch die 50-60 stellige Zahl erklärt :wink: |
Re: Text in Dualzahlen umwandeln
ich habe schon wieder ein neues Problem...
ich habe ja schon geschrieben, dass ich ein Verschlüsselungsverfahren nachstellen möchte. Nun habe ich es also geschafft einen Text aus einem Editfeld und einen Schlüssel aus einem Editfeld in ascii-Werte zu verwandeln und diese jeweils in einem Label auszugeben. Der nächste Schritt der folgen sollte und bei dem ich Probleme habe ist folgender: Ich möchte nun die erste Zahl des Textes mit der ersten Zahl des Schlüssels addieren, die zweite zahl mit der Zweiten, usw...Dabei soll der Schlüssel sich wiederholen wenn der Text länger ist als der Schlüssel..aber gehen wir zuerst von gleichlangen Text und Schlüssel aus. Beispiel: Text: 103104 Schlüssel: 871055 verschlüsselter Text: 974159 ich habe auch wieder einen Versuch gestartet aber habe keine ahnung ob das ein richtiger ansatz ist:
Delphi-Quellcode:
er zeigt mir immer eine Fehlermeldung an, dass bei text[b] und schluessel[b] ein array-typ erforderlich ist...ich hab aber keine ahnung was das ist..kann mir also jemand sagen ob das was ich da gemacht hab richtig ist und wenn ja wie das mit dem array-typ ist und wie man den da einbaut?
procedure TForm1.Button2Click(Sender: TObject);
Var schluessel,text,b:integer; begin text:= strtoint(Label1.caption); //in Label1.caption steht der in zahlen umgewandelte Text schluessel:= strtoint(Label2.caption);// in label2.caption steht der in zahlen umgewandelte schlüssel for b:=1 to length(Label1.caption) do begin Label3.caption:= Label3.caption + (inttostr( text[b] + schluessel[b])); // in label3.caption soll der verschlüsselte Text // ausgegeben werden end; end; end; |
Re: Text in Dualzahlen umwandeln
Naja, im einfachsten Fall probier es doch mal so:
Delphi-Quellcode:
Für den Schlüssel musst du dann natürlich eine separate Indexvariable nehmen, die von 1 bis Length(Schluessel) - 1 gezählt wird und dann wieder bei 1 beginnt.
(IntToStr( StrToInt(text[b]) + StrToInt(schluessel[b])))
Ein kleiner Tip noch: Überleg dir bevor du programmierst erst mal auf einem Blatt Papier was du machen willst und wie es funktionieren könnte. Ein Problem, über das du evtl. noch stolpern wirst, wird vielleicht folgendes: Zitat:
Wie stelltst du jetzt fest, was die codierte Repräsentation des ersten Zeichens deines Klartextes ist? Das Ergebnis deiner Addition muss ja nicht zwangsweise zweistellig sein... |
Re: Text in Dualzahlen umwandeln
Zitat:
|
Re: Text in Dualzahlen umwandeln
Hallo,
Du wandelst jetzt den Text aus Label1 und Label2 in Integerzahlen um (also der String '10324' wird zu 10324). Da kannst Du natürlich nicht mit der von Dir verwendeten Methode die beiden ersten zahlen addieren, dann die zweiten usw. Dazu müsstest Du die Variablen Text und Schlüssel als Strings definieren. Folgender Code sollte funktionieren (ungetestet, hab grad kein Delphi zur Hand):
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
Var b:integer; schluessel,text : string; begin text:= Label1.caption; //in Label1.caption steht der in zahlen umgewandelte Text schluessel:= Label2.caption;// in label2.caption steht der in zahlen umgewandelte schlüssel for b:=1 to length(Label1.caption) do begin Label3.caption:= Label3.caption + (inttostr(strtoint(text[b]) + strtoint(schluessel[b]))); // in label3.caption soll der verschlüsselte Text // ausgegeben werden end; end; end; |
Re: Text in Dualzahlen umwandeln
@runningsoft und alle andern:danke für die hilfe es funktioniert:)
@guidok: den tip mit dem Blatt kenn ich schon und wende ihn auch nach bestem gewissen an :wink: natürlich möchte ich das auch irgendwann wieder entschlüsseln aber ich verstehe das Problem das du ansprichst leider nicht.. |
Re: Text in Dualzahlen umwandeln
ich habe aber jetzt erstmal ein anderes Problem gelöst:
wenn ich das berücksichtig habe was ihr mir geraten habt war die Summe der Zahlen immer länger als der text bzw der schlüssel, da 9+5= 14 und dann auch 14 ausgegeben wurde. Deshalb habe ich nun eine if-schleife eingebaut die verhindert dass zahlen >9 ausgegeben werden.wenn eine Zahl größer 9 ist wird sie minus 10 gerechnet und dann ausgegeben:
Delphi-Quellcode:
für die entschlüsselung wird dann der verschlüsselte text minus den schlüssel genommen und sollte das ergebnis dann <0 sein wird +10 gerechnet so dürfte ich doch dann wieder auf meinen ausgangstext kommen oder?
procedure TForm1.Button2Click(Sender: TObject);
Var schluessel,text:string; b,zwischenwert:integer; begin text:= Label1.caption; schluessel:=Label2.caption; for b:=1 to length(Label1.caption) do begin zwischenwert:= ( StrToInt(text[b]) + StrToInt(schluessel[b])); if zwischenwert > 9 then zwischenwert:= zwischenwert -10; label3.caption:= label3.caption + inttostr(zwischenwert); end; end; |
Re: Text in Dualzahlen umwandeln
Ist doch relativ einfach:
Wenn Du ein Zeichen (Byte) binär darstellen willst, bekommst Du einen String der 8 Zeichen Lang ist. also so etwas 01010100.
Delphi-Quellcode:
dann werden alle Bits von "oben" nach "unten" (most signigficant/least significant ?)
Result:=' ';
in den String übertragen:
Delphi-Quellcode:
mit shr schiebst Du das zu verwertende Bit an die letzte Stelle und maskierst es mit $01.Wobei das $01 sicher stellt, daß immer 0 oder 1 als Ergebnis heraus kommt (eben das aktuell letzte Bit).
result[1]:=bina[(inbyte shr 7) and $01];
result[2]:=bina[(inbyte shr 6) and $01]; result[3]:=bina[(inbyte shr 5) and $01]; result[4]:=bina[(inbyte shr 4) and $01]; result[5]:=bina[(inbyte shr 3) and $01]; result[6]:=bina[(inbyte shr 2) and $01]; result[7]:=bina[(inbyte shr 1) and $01]; result[8]:=bina[(inbyte and $01)]; Und das nimmst Du als Index für ein Array (bina), das nur 0 und 1 enthält. So wird der Zahlenwert 0 als Ziffer 0 dargestellt und der Wert 1 als 1.
Delphi-Quellcode:
Ich hoffe das ist verständlich
const
bina:array [0..1] of char=('0','1'); K-H |
Re: Text in Dualzahlen umwandeln
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 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