Autor |
Beitrag |
darkdester
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 17:03
Ok sollte ja neues topic machen wenn ichs net kapier^^.
Ok ich bitte freundlcih das mit jemand ncohmal das mit den Asccicode erklärt.
Ich will mehrere buchstaben-zahlenkombis in asciicode umwandeln.
und dann weider zurück
wie mach ich das?
ihr wäre ecuh sehr sehr dankbar
1000 dank im voraus
MFG darkdester
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 17:13
Das machst du mit den beiden Funktionen ORD und CHR. ORD wandelt Buchstaben in ihre ASCII-Codierung um (ShortInt bzw. Byte) und CHR macht das Gegenteil.
kleines Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var x: String; y: Array[0..255] of Integer; i: Integer;
begin x:='Hallo, du da!!'; for i:=Low(x) to High(x) do y[i]:=ORD(x[i]); end; |
Danach hast du die einzelnen Buchstaben des Strings x als ShortInt- (Byte-) Werte in dem Array y liegen. Low(x) und High(x) stehen für das erste bzw. das letzte Element des Strings. Alternativ kannst du schreiben:
Delphi-Quelltext 1:
| for i:=1 to Length(x) do |
andersrum:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var x: String; y: Array[0..255] of Integer; i: Integer;
begin x:=''; for i:=Low(y) to High(y) do x:=x+CHR(y[i]); ShowMessage(x); end; |
Das schreibt die ShortInt-Werte aus dem Array wieder zurück in den String x und zeigt dir danach ne MessageBox mit dem String.
Das Array hab ich jetzt mal nicht dynamisch gemacht, sondern ihm zur Vereinfachung eine feste Länge zugewiesen.
Zuletzt bearbeitet von Luzzifus am Fr 22.10.04 18:53, insgesamt 2-mal bearbeitet
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 17:19
danke mal sehn obs klappt wie ich das will
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 22.10.04 17:20
Du beziehst dich vermutlich auf die Frage, was die Chr-Funktion so macht.
Diese Funktion erwartet als Argument eine Zahl vom Type Byte.
Das Resultat der Funktion ist dann ein Zeichen (Type Char).
Delphi-Quelltext
Das Beispiel zeigt den Buchstabe 'A', da der ASCII-Wert von 'A' gleich 65 ist.
Irgendwelche Buchstaben kannst du nicht als Argument übergeben.
Der umgekehrte Weg geht mit der Ord-Funktion
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 17:27
ach nochwas:
Da du ja meinen Hinweis im anderen Thread ignoriert hast, dich vielleicht erst einmal ein bisschen zu belesen, was Delphi betrifft, hier mal zwei Links:
www.delphi-tutorials.de/
www.delphi-source.de/tutorials/
Da gibt's jeweils gute Einsteiger-Tutorials, die die allermeisten deiner Fragen sicher beantworten können und dir zusätzlich einfach ein gewisses Grundwissen zur Programmierung mit Object-Pascal und Delphi vermitteln können.
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 17:31
gibts bei den array ne weiten begrenzung?
weil beim string musste ich schon sehn max 255 zeichen -.-
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 17:35
Beim Array gibt's keine Begrenzung. Wenn es sehr lang werden soll, würd ich aber empfehlen es dynamisch zu machen (also keine feste Länge), ganz einfach damit nicht unnötig Speicherplatz verschwendet wird.
Ein ShortString ist auf 255 Zeichen beschränkt, ein normaler String nicht. Es gibt ausserdem noch AnsiString (2^31 ASCII-Zeichen) und WideString (2^31 Unicode Zeichen).
Zuletzt bearbeitet von Luzzifus am Fr 22.10.04 17:46, insgesamt 2-mal bearbeitet
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 22.10.04 17:38
Folgendes ist freundlich gemeint und soll nicht unfair sein:
Bitte lies doch erst die OH. Wenn du es dann nicht verstehst, wird dir sicher geholfen. Das was du fragst, ist Basis-Wissen. Nimm doch unsere Ratschläge an und lies die Tutorials.
Zu deiner Frage:
Strings sind NICHT auf 255 Zeichen begrenzt.
Bei einem Array ist es eine Frage des Speichers.
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 17:41
jasocul hat folgendes geschrieben: | Folgendes ist freundlich gemeint und soll nicht unfair sein:
Bitte lies doch erst die OH. Wenn du es dann nicht verstehst, wird dir sicher geholfen. Das was du fragst, ist Basis-Wissen. Nimm doch unsere Ratschläge an und lies die Tutorials.
Zu deiner Frage:
Strings sind NICHT auf 255 Zeichen begrenzt.
Bei einem Array ist es eine Frage des Speichers. |
udn weiso kam dann fehler: strin-literale können nur 255 zeichen enthalten?
anaj egal ich les tuts nur hab ich ka zeit alles per ahnd zu suchen
andere frage die steht bestimmt ner so im tut
wie les ich nun das komplette array aus?
EDIT:habs gefunden xD
Zuletzt bearbeitet von darkdester am Fr 22.10.04 17:43, insgesamt 1-mal bearbeitet
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 17:41
jasocul hat folgendes geschrieben: | Zu deiner Frage:
Strings sind NICHT auf 255 Zeichen begrenzt. |
Achja stimmt, das war der ShortString der auf 255 Zeichen begrenzt ist. Sorry dafür.. ^^ (ich ändere das oben besser mal..)
Zitat: | andere frage die steht bestimmt ner so im tut
wie les ich nun das komplette array aus? |
Stimmt die steht so nicht im Tutorial. Aber Programmieren ist ein wenig mit Kreativität verbunden und wenn du die ersten zwei bis drei Kapitel gelesen hast kannst du die Frage selbst beantworten.
Ausserdem habe ich das oben schon gemacht, ich habe nämlich mittels einer FOR-SCHLEIFE das GESAMTE ARRAY in Buchstaben umgewandelt und in den String geschrieben. 
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 17:47
ehm weil ich das ( www.delphi-source.de/tipps/sprache/?id=163 ) gefunden hab ne frage
mein delphi erkennt diese SumInt net als befehl Oo
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 17:49
Wahrscheinlich hast du vergessen, die Unit Math in die uses zu schreiben (steht in der ersten Zeile des Tipps).
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 17:52
Delphi-Quelltext 1: 2: 3: 4: 5:
| x:='Hallo, du da!!'; for i:=0 to Length(x)-1 do y[i]:=ORD(x[i]); summe:=SumInt(y); Memo2.Text:=InttoStr(summe); |
so DAS plus das math oben müsste doch stimmen?
jetzt gibts en integer overflow oda so , integerüberlauf...
och man ><
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
Zuletzt bearbeitet von darkdester am Fr 22.10.04 17:57, insgesamt 1-mal bearbeitet
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 17:57
Das Problem an der Stelle ist dass das Array nicht dynamisch ist, sondern die feste Länge 256 hat. Und da du's sicher nicht initialisiert hast, wird der komplette Speichermüll der in den nicht zugewiesenen Feldern des Arrays steht, mit aufsummiert.
schreibe mal das hier vor die Stelle wo du Zahlen in das Array schreibst:
Delphi-Quelltext 1: 2:
| for i:=Low(y) to High(y) do y[i]:=0; |
Dann sollte das nicht mehr passieren.
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 18:05
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| x:='Hallo, du da!!'; for i:=Low(y) to High(y) do y[i]:=0; for i:=0 to Length(x)-1 do y[i]:=ORD(x[i]); summe:=SumInt(y); Memo2.Text:=InttoStr(summe); |
es geht aba er gibt mir nur ne 4 stellige zahl aus O.o
boah ich kann net mehr ><
edit: bin an lösung dran
ich kann das prob mit dem integer string addieren net lösen der solls ja net addieren <<
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 18:10
Ja vielleicht ist deine Summe halt nur vierstellig..
Falls nicht gibt mal den restlichen Quelltext her, mit dem du Zahlen ins Array schreibst.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 22.10.04 18:16
Ist x ein String? Dann solltest Du beachten, dass die Indizierung eines Strings bei 1 und nicht bei 0 beginnt!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 18:24
Luzzifus hat folgendes geschrieben: | Ja vielleicht ist deine Summe halt nur vierstellig..
Falls nicht gibt mal den restlichen Quelltext her, mit dem du Zahlen ins Array schreibst. |
allein "Hallo" ergibt schon mehr als 4 stellen in ascii code <<
indizierung x.X?
x ist ein string
ok hier nochmal bisheriger code
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var x: String; y: Array[0..2000] of Integer; i: Integer; summe: integer; begin x:='Hallo, du da!!'; for i:=Low(y) to High(y) do y[i]:=0; for i:=0 to Length(x)-1 do y[i]:=ORD(x[i]); summe:=InttoStr(SumInt(y)); Memo2.Text:=InttoStr(summe);
end; |
problem: ausgabe von 1051 obwohl FALSCH
|
|
Luzzifus
      
Beiträge: 200
Win2K
D6 Prof
|
Verfasst: Fr 22.10.04 18:34
SumInt hängt nicht die Zahlen aneinander sondern addiert sie.
ich war so frei und hab das für 'Hallo, du da!!' mal von Hand ausgerechnet:
72+97+108+108+111+44+32+100+117+32+100+98+33+33 = 1085
Wo bitte ist das nicht vierstellig? 
Zuletzt bearbeitet von Luzzifus am Fr 22.10.04 18:39, insgesamt 2-mal bearbeitet
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 22.10.04 18:36
Luzzifus hat folgendes geschrieben: | SumInt hängt nicht die Zahlen aneinander sondern addiert sie.
ich war so frei und hab das für 'Hallo, du da!!' mal von Hand ausgerechnet:
72+97+108+108+111+44+32+100+117+32+100+98+33+33 = 1085
Wo bitte ist das nicht vierstellig?  |
ich wills aba NICHT addieren er soll mir die asciiwerte hintereinander schreiben
geht das irgendwie??
da kommt derwing 1051 raus 
|
|