Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Die ord() Funktion (https://www.delphipraxis.net/109622-die-ord-funktion.html)

J0hnD03 4. Mär 2008 17:40


Die ord() Funktion
 
Ich möchte euch bitten für nen Anfänger mal die ord() Funktion zu erklären !auch nach dem lesen von einigen erklärungen im inet versteh ich nich so 100%ig was sie macht !

SirThornberry 4. Mär 2008 17:49

Re: Die ord() Funktion
 
die Ord Function führt einen cast durch. Jetzt denke ich allerdings das du das auch nicht verstehst.
Also:
Beim Computer gibt es Datenspeicher und darauf sind Bytes die aneinander gereiht da liegen.
Wie man diese jetzt interpretiert ist Sache des Programmierers. Du kannst hintereinander liegende Bytes als String, Wort, Kommazahl, kleine Ganzzahl, große Ganzzahl etc. interpretieren. Und Ord macht nichts anderes als den übergebenen Wert als Ordinalwert (Zahlenwert) zu interpretieren. Wenn du ord also ein 's' übergibst, ist das s ja auch nur ein Byte was in deinem Fall als Buchstabe interpretiert wird aber letztendlich ist es nur eine Ansammlung von Bits. Wenn du ord das s übergibst bekommst du die bits von 's' als zahl interpretiert zurück gegeben. Das gleich kannst du auch durch einen direkten cast erreichen:
Delphi-Quellcode:
zahl := byte('s'); //ein cast, man sagt das 's' als byte interpretiert werden soll
zahl := ord('s'); //funktionsaufruf - durch compilermagie/optimierung intern auch nur ein cast
umgekehrt geht es natürlich auch das du den speicher einer zahl als zeichen interpretierst und einer neuen Variablen zuweist:
Delphi-Quellcode:
zeichen := char(65); //ist glaub ich ein große A

DeddyH 4. Mär 2008 17:50

Re: Die ord() Funktion
 
Hallo, Willkommen in der DP :dp: ,
Ord() macht nichts Anderes, als die Zahl auszugeben, die dem angegebenen Zeichen in der ASCII-Tabelle zugeordnet ist. Alternativ kannst Du es auch mal mit Byte() versuchen.

mkinzler 4. Mär 2008 17:51

Re: Die ord() Funktion
 
Diese Funktion liefert dir den Asciicode eines Zeichens.

J0hnD03 4. Mär 2008 18:13

Re: Die ord() Funktion
 
vielen dank

generic 4. Mär 2008 18:43

Re: Die ord() Funktion
 
ord ist noch einfacher.

ord gibt den index eines eintrages aus eine liste zurück.

das kann z.b. der ascii code sein aus der ascii liste.
es kann aber auch ein index aus einer einfachen aufzählung sein.

SirThornberry 4. Mär 2008 20:00

Re: Die ord() Funktion
 
Zitat:

Zitat von generic
ord ist noch einfacher.

ord gibt den index eines eintrages aus eine liste zurück.

das kann z.b. der ascii code sein aus der ascii liste.
es kann aber auch ein index aus einer einfachen aufzählung sein.

bist du dir sicher?

Dann müsste folgendes Beispiel eigentlich 3 ausgeben (weil me50 an dritter Stelle steht). Tatsächlich wird aber 50 ausgegeben weil nicht der Index von ord zurück gegeben wird sondern die Bytes des übergebenen Wertes werden als ordinaler Wert interpretiert. Folglich ein ganz normaler cast.
Wenn du dir ansiehst was der Compiler generiert, wirst du sogar feststellen das ord(wert) und byte(wert) das gleiche ergibt (eben weil es nur ein einfacher cast ist).
Delphi-Quellcode:
type
  TMyEnum = (me0, me1, me2, me50 = 50, me51);
[...]
showmessage(inttostr(ord(me50)));
:zwinker:

Hawkeye219 4. Mär 2008 21:10

Re: Die ord() Funktion
 
Hallo Jens,

Zitat:

Zitat von SirThornberry
Dann müsste folgendes Beispiel eigentlich 3 ausgeben (weil me50 an dritter Stelle steht). Tatsächlich wird aber 50 ausgegeben weil nicht der Index von ord zurück gegeben wird sondern die Bytes des übergebenen Wertes werden als ordinaler Wert interpretiert. Folglich ein ganz normaler cast.

Man könnte es auch so interpretieren: me50 steht an der 51. Stelle, du wolltest aber nicht alle Werte mit einem Namen versehen:

Delphi-Quellcode:
type
  TMyEnum = (me0, me1, me2, me50 = 50, me51);
var
  MySet : set of TMyEnum;
begin
  MySet := [me0..me51];

  if (TMyEnum(42) in MySet) then
    ShowMessage ('surprise');
end;
Gruß Hawkeye

SirThornberry 4. Mär 2008 22:12

Re: Die ord() Funktion
 
ich wollte sagen das die Aussage das Ord den Index zurück gibt falsch ist. Es wird nirgends mit einer Indextabelle etc. gearbeitet sondern es werdn schlichtweg nur die Bits als Zahl interpretiert. Und das ich bei meinem Enum Werte überspringe ist eigentlich auch falsch. Ein Enum ist nur eine Definition von Constanten die typisiert werden.
Das Enum war nur ein Beispiel. Ich hätte ebenso ein Array of byte nehmen können mit zufälligen Werten. Dort wird auch nicht der Index zurück gegeben wo der Wert im Array steht sondern es wird wieder nur ein cast gemacht.

3_of_8 4. Mär 2008 23:02

Re: Die ord() Funktion
 
...was dann aber nicht funktionieren würde. Ord() funktioniert nur mit ordinalen Typen. Dazu gehören sämtliche Integer-Typen, Aufzählungen, Chars und (da bin ich mir jetzt nicht ganz sicher) möglicherweise auch Mengen. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.

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