Entwickler-Ecke
Algorithmen, Optimierung und Assembler - String rückwärts einlesen - Asm to delphi
MagicRain - Fr 29.05.09 12:54
Titel: String rückwärts einlesen - Asm to delphi
Moin Leute ich habe hier folgendes Problem ich möchte ein String rückwärts einlesen bloß wie ich das mache soll weiß ich nicht! Hoffe jemand von euch kann mir irgendwie helfen :P
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Const Tabelle = '@!SDVXFGUHbvnc908 *&)5 fjd095j90kcf ja%JKeSFAKDJSLJgJDF 2k34lsdjfkldjf jdsklfjadskgl;jafdkl;gjasdkl;r568r;jvggfl;kd4ui12098 vlkjfdlk;sfjgklfdgjlejt03456erjgrj';
0040F989 |. 8D99 53C64100 LEA EBX,DWORD PTR DS:[ECX+41C653] ; 0040F98F |> 0FBE86 54C641>/MOVSX EAX,BYTE PTR DS:[ESI+41C654] ; 0040F996 |. 0FBE13 |MOVSX EDX,BYTE PTR DS:[EBX] ;
eEAX := Ord(Tabelle[i]);
eEDX := Ord(Tabelle[i] - F9) oder vlt eEDX := Ord(Tabelle[i]) - F9; |
Aber wie mach ich das vom letzen Zeichen bis zum ersten ein zu lesen?
MfG
Delete - Fr 29.05.09 13:21
Ich weiß zwar nicht, was genau Du mit Einlesen meinst, aber evtl. suchst Du ReverseString aus StrUtils.
MagicRain - Fr 29.05.09 13:27
Nein. Zeichen weise in hex einlesen....... Tabellen char A = 41h.... halt Ord(Tabelle[i]); hmm
MFG
MagicRain - Sa 30.05.09 03:50
heftig keiner ne idee ?
:/
jaenicke - Sa 30.05.09 04:54
Naja, mir ist nicht klar was du eigentlich meinst und wo das Problem ist. :nixweiss:
alzaimar - Sa 30.05.09 06:11
Delphi-Quelltext
1: 2:
| For i := Length (Tabelle) downto 1 do Foobar(Tabelle[i]); |
Foobar wird zuerst mit dem letzten Zeichen, dann mit dem vorletzten usw. aufgerufen. Rückwärts.
ffgorcky - Sa 30.05.09 09:04
Die Möglichkeit von
alzaimar wollte ich auch gerade so ähnlich aufschreiben.
Aber - da ich damit noch nicht so wirklich Erfahrungen habe - würde ich das dann doch eher so schreiben,
indem ich direkt auf die Indexe zugreife:
Delphi-Quelltext
1: 2:
| for i:=length(umzudrehenderString)-1 downto 0 do umgedrehterString:=umzudrehenderString[i]; |
Oder man kann es meiner Ansicht nach auch so schreiben:
Delphi-Quelltext
1: 2:
| for i:=0 to length(umzudrehenderString)-1 do umgedrehterString:=umzudrehenderString[length(umzudrehenderString)-1-i]; |
Ich weiß jetzt leider nicht, was sauberer ist.
Ich denke aber mal, dass meine erste Lösung sauberer ist.
Oder haben wir jetzt alle Deine Frage falsch verstanden?
- Dann formuliere sie doch bitte noch einmal genauer.
jaenicke - Sa 30.05.09 16:32
ffgorcky hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| for i:=length(umzudrehenderString)-1 downto 0 do umgedrehterString:=umzudrehenderString[i]; | |
Erstens hat der erste Buchstabe den Index 1 wie bei
alzaimar, zweitens legst du so in umgedrehterString jeweils nur einen einzelnen Buchstaben der Reihe nach und überschreibst jeweils den vorherigen damit...
Wenn es um das simple Umdrehen ginge, dann gibt es wie bereits gesagt wurde eine simple Funktion dafür (ReverseString). Aber darum geht es ja nicht.
Falls das Problem nur das rückwärts zeichenweise Durchgehen ist, hat es
alzaimar ja geschrieben.
MagicRain - Sa 30.05.09 17:26
Zitat: |
Falls das Problem nur das rückwärts zeichenweise Durchgehen ist, hat es alzaimar ja geschrieben. |
Das war es danke euch dann doch nocht :P
ffgorcky - Sa 30.05.09 19:32
jaenicke hat folgendes geschrieben : |
zweitens legst du so in umgedrehterString jeweils nur einen einzelnen Buchstaben der Reihe nach und überschreibst jeweils den vorherigen damit... |
Ups, ich meinte das doch eigentlich so:
Delphi-Quelltext
1: 2:
| for i:=length(umzudrehenderString)-1 downto 0 do umgedrehterString:=umgedrehterString+umzudrehenderString[i]; |
Da habe ich irgendwie wohl mal wieder so einen Das-ist-ja-viel-zu-einfach-Fehler gemacht...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!