Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi #70^2^!^'^%#58 <- Wieso funktioniert das? (https://www.delphipraxis.net/11469-70%5E2%5E-%5E%5E-58-wieso-funktioniert-das.html)

Wormid 7. Nov 2003 12:43


#70^2^!^'^%#58 <- Wieso funktioniert das?
 
Bevor jemand meckert, das IST ein aussagekräftiger Titel... :mrgreen: (War doch kein guter Titel... :cry: )

Ich bin in einem älteren Beitrag über die Signatur von Aya gestolpert... Und jetzt interessiert mich doch tatsächlich, wie das wohl funktioniert.

#65^,^3^/#44#32^+^!^.^.#32^-^)^2#32^%^)^.^%^2#32^%^2^+^,#228^2^%^.#44#32^7^!^2 ^5^-#32^$^!^3#32^$^!#32^)^2^'^%^.^$^7^)^%#32#80^/^)^.^4^%^2^-#228#223^)^'#32^'^%^(^4#32^-^)^4#32^$^%^-#32#83^4^2^)^.^'#63

Um "echte" Strings in die Form da oben umzuwandeln, habe ich mir mal folgende Funktion gebastelt:

Delphi-Quellcode:
function StringToAya(S: String): String;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(S) do
    if (Ord(S[i]) >= 97) and (Ord(S[i]) <= 122) then
      Result := Result + '^' + Chr(Ord(S[i]) - 64)
    else
      Result := Result + '#' + IntToStr(Ord(S[i]));
end;
Ich bin da mehr oder weniger durch probieren hingekommen, kann mir also jemand erklären, was dahintersteckt? (Die Form #97... ist mir schon klar, aber mit dem ^$ = d werde ich nicht fertig.)

Gruß

Wormid

Daniel B 7. Nov 2003 12:45

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
Das sind einfach nur Zeiger auf die jeweiligen Ascii-Zeichen, sonst nichts.

Und so ne aufwendige Prozedur brauchst auch nicht, eine einfache Message reicht auch!!
Code:
ShowMessage(#65^,^3^/#44#32^+^!^.^.#32^-^)^2#32^%^)^.^%^2#32^%^2^+^,#228^2^%^.#44#32^7^!^2^5^-#32^$^!^3#32^$^!#32^)^2^'^%^.^$^7^)^%#32#80^/^)^.^4^%^2^-#228#223^)^'#32^'^%^(^4#32^-^)^4#32^$^%^-#32#83^4^2^)^.^'#63);

Nalincah 7. Nov 2003 12:50

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
Also im moment raff ich davon mal überhaupt nichts
Wie geht das?
Die Proc von Wormid versteh ich ja einigermaßen aber das von DanielB raff ich irgendwie überhaupt nicht :wiejetzt:

Wormid 7. Nov 2003 12:51

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
Moin,

die Prozedur ist ja auch für den umgekehrten Weg: Klartext -> Zeiger!

Das es sich irgendwie um Zeiger handelt, habe ich mir gedacht, aber nachvollziehen kann ich es nicht.

Ascii: 97 = a
bei der Variante oben: ^! = a
und Ascii 33 = ! ...

Wie passt das also bitte zusammen? :gruebel:

@General: Was ist an dem ShowMessage so kompliziert? :mrgreen:

phlux 7. Nov 2003 12:52

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
Also das sind Pointer auf die jeweiligen Chars, und die Showmessagefkt zeigt die als Buchstaben an mehr nicht, Showmessage ist übrigends eine fkt, die Delphi selbst bietet ;)

Edit: Mist Wormid war schneller ;)

Nalincah 7. Nov 2003 12:55

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
An dem ShowMessage an sich nichts...Nur ich hab mich gefragt warum der den String anzeigt..Hab Pointer irgendwie noch nie so wirklich gerafft

Daniel 7. Nov 2003 12:55

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
Zitat:

Zitat von Wormid
Bevor jemand meckert, das IST ein aussagekräftiger Titel... :mrgreen:

Ich muß Dich leider enttäuschen. Dies ist kein aussagekräftiger Titel. Sinn und Zweck eines Titels ist es, daß ein anderer Benutzer der DP schon alleine durch das Lesen dieses Titels erfährt, worum es in dem zugehörigen Beitrag geht.
:warn:

Du tust uns allen einen Gefallen, wenn Du diesen Titel rasch noch mal editierst. (Noch kannst Du es selber. :wink:).

Wormid 7. Nov 2003 12:56

Re: #87^)^%#32^&^5^.^+^4^)^/^.^)^%^2^4#32^$^!^3#63
 
Aber wieso ist ein '!' (ordinal 33) ein Pointer auf 'a'... Steht am Anfang im Memory die Ascii-Tabelle? Und wenn ja, warum dann nur die Kleinbuchstaben? Oder kann ich auf die Art da oben nur nicht an die großen dran?

:?:

choose 7. Nov 2003 13:06

Re: #70^2^!^'^%#58 <- Wieso funktioniert das?
 
Verwende diesen Code
Delphi-Quellcode:
var
  myString: string;
  myChar: Char;
begin
  myString:= #65^0;
  myChar:= myString[2];

  showmessage(Format('String: "%s"; Zweites Zeichen: "%s"; ASCII: %d',
    [myString, myChar, Ord(myChar)]));
end;
ändere das Zeichen hinter dem "^" und wirf einen Blick auf eine ASCII-Tabelle

choose 7. Nov 2003 13:13

Re: #70^2^!^'^%#58 <- Wieso funktioniert das?
 
Hallo Phlux hallo Daniel,

wie kann es sich um Pointer handeln, wenn
  • im Adressraum bei 0x00000000 bis 0x000000ff nur Nullen stehen,
  • das Literal schließlich zur Kompilierzeit in einen echten String inkl Adresse umgewandelt wird und
  • die Umsetzung caseInsensitiv ist (#65^a=#65^A)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz